我看过用以下三种方式编写的字符串:
lv_str = 'test'
lv_str2 = `test`
lv_str3 = |test|
到目前为止,我唯一注意到的是'有时会修剪空白,而`会保留空白。
我最近才发现| -对此了解不多。
何时可以最好地使用哪种方法以及是否还有更多方法,有人可以在此处解释或发布一个好的链接吗?
答案 0 :(得分:5)
答案 1 :(得分:3)
使用'
定义字符类型的文字和非整数数字:
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允许您定义字符序列的方式的详尽列表。
答案 2 :(得分:2)
回答问题的“何时使用”部分:
如果需要尾随空格, `
和|
很有用(有关详细信息,请忽略'
,请参见this blog post,{S1会严重引用)因此帖子令人困惑):
DATA(arrival) = `Hello ` && `world`.
DATA(departure) = |Good | && |bye|.
使用字符串模板(|
)而不是`
和&&
的组合,以便于阅读(它仍然很主观,我倾向于使用|
;我的键盘|
也更容易获得):
DATA(arrival) = `Dear ` && mother_name && `, thank you!`.
DATA(departure) = |Bye { mother_name }, thank you!|.
有时候,您别无选择:如果在给定位置需要String数据对象,则必须使用`
或|
。还有很多其他情况。
在所有其他情况下,我更喜欢使用'
(可能是因为我用键盘比|
更容易获得它)。
答案 3 :(得分:2)
尽管其他答案很有帮助,但它们并未提及'
和`
之间最重要的区别。
用单引号定义的字符链将被定义为类型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.