我见过这样写的字符串:
lv_str = 'test'
lv_str2 = `test`
lv_str3 = |test|
到目前为止,我唯一注意到的是" 有时会修剪空格,而 ' 保留它们。
我最近才发现 |- 还不太了解。
有人可以解释一下,或者在这里发布一个好的链接,什么时候哪种方式最好,如果还有更多方法?
|...| 表示 ABAP 字符串模板。使用字符串模板,我们可以使用文本、嵌入式表达式和控制字符创建字符串。
- ABAP文档
- 例子
使用 '
定义字符类型的文字和非整数:
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 允许您定义字符序列的方式的详尽列表。
要回答问题的"何时应该使用它们"部分:
如果需要尾随空格,`
和|
很有用(它们被忽略'
,请参阅此博客文章以获取更多信息,请注意SCN今天将引号呈现得很糟糕,因此帖子令人困惑):
DATA(arrival) = `Hello ` && `world`.
DATA(departure) = |Good | && |bye|.
使用字符串模板(|
)而不是`
和&&
的组合,以便于阅读(它仍然非常主观,我倾向于|
;使用我的键盘,|
也更容易获得):
DATA(arrival) = `Dear ` && mother_name && `, thank you!`.
DATA(departure) = |Bye { mother_name }, thank you!|.
有时您没有选择:如果 String 数据对象需要在给定位置使用,则必须使用 `
或 |
。还有许多其他情况。
在所有其他情况下,我更喜欢使用'
(可能是因为我用键盘比|
更容易获得它)。
尽管其他答案很有帮助,但它们没有提到'
和`
之间最重要的区别。
用单引号定义的字符链将被定义为具有链长度的 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.