',`和|和有什么区别?何时使用?

时间:2019-01-22 10:32:16

标签: abap

我看过用以下三种方式编写的字符串:

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

到目前为止,我唯一注意到的是'有时会修剪空白,而`会保留空白。
我最近才发现| -对此了解不多。

何时可以最好地使用哪种方法以及是否还有更多方法,有人可以在此处解释或发布一个好的链接吗?

4 个答案:

答案 0 :(得分:5)

| ... |表示ABAP字符串模板。 使用字符串模板,我们可以使用文本,嵌入的表达式和控制字符来创建字符串。

答案 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.