В чем разница между ', `и | и когда их следует использовать? - PullRequest
0 голосов
/ 22 января 2019

Я видел строки, написанные следующим образом:

lv_str  = 'test'
lv_str2 = `test`
lv_str3 = |test|

Единственное, что я заметил до сих пор, это то, что 'иногда обрезает пробелы, а `сохраняет их.
Я простонедавно найден |- пока не очень много знаю об этом.

Может кто-нибудь объяснить или опубликовать хорошую ссылку здесь, когда какой из этих способов лучше всего используется и есть ли еще больше способов?

Ответы [ 4 ]

0 голосов
/ 24 января 2019

Хотя другие ответы полезны, в них не упоминается самое важное различие между ' и `.

Цепочка символов, определенная одиночной кавычкой, будет определяться как тип C с точнодлина цепочки даже , включая пробелы в начале и конце последовательности символов.

Так что этот 'TEST' получит в точности тип C LENGTH 4.

везде, где такая конструкция `TEST` будет всегда вычислять для типа string.

Это очень важно, например, в таком случае.

REPORT zutest3.

DATA i TYPE i VALUE 2.
DATA(l_test1) = COND #( WHEN i = 1 THEN 'ACT3' ELSE 'ACTA4').
DATA(l_test2) = COND #( WHEN i = 1 THEN `ACT3` ELSE `ACTA4`).

WRITE l_test1.
WRITE l_test2.
0 голосов
/ 22 января 2019

Используйте ' для определения символьных литералов и нецелых чисел:

CONSTANTS some_chars TYPE char30 VALUE 'ABC'.
CONSTANTS some_number TYPE fltp VALUE '0.78'.

Используйте ` для определения строковых литералов:

CONSTANTS some_constant TYPE string VALUE `ABC`.

Используйте | для сборки текста:

DATA(message) = |Received HTTP code { status_code } with message { text }|.

Это исчерпывающий список способов, которыми ABAP позволяет вам определять последовательности символов.

0 голосов
/ 22 января 2019

Чтобы ответить на вопрос «когда они должны использоваться»:

` и | полезны, если нужны конечные пробелы (они игнорируются с ', cf это сообщение в блоге для получения дополнительной информации, будьте осторожны, SCN сегодня плохо отображает цитаты, поэтому сообщение сбивает с толку):

DATA(arrival) = `Hello ` && `world`.
DATA(departure) = |Good | && |bye|.

Используйте строковые шаблоны (|), а не комбинацию ` и && для более легкого чтения (оно остается очень субъективным, я предпочитаю |; с моей клавиатурой | также легче получить):

DATA(arrival) = `Dear ` && mother_name && `, thank you!`. 
DATA(departure) = |Bye { mother_name }, thank you!|.

Иногда вы неУ вас есть выбор: если объект данных String ожидается в заданной позиции, вы должны использовать ` или |.Есть много других случаев.

Во всех других случаях я предпочитаю использовать ' (возможно, потому что я получаю его еще легче с помощью клавиатуры, чем |).

0 голосов
/ 22 января 2019

| ... |обозначает строковые шаблоны ABAP.С помощью строковых шаблонов мы можем создавать символьную строку, используя тексты, встроенные выражения и управляющие символы.

...