'、` 和 | 之间有什么区别,什么时候应该使用它们?
What is the difference between ', ` and |, and when should they be used?
我见过用这三种方式写的字符串:
lv_str = 'test'
lv_str2 = `test`
lv_str3 = |test|
到目前为止我唯一注意到的是 ' 有时会修剪空格,而 ` 会保留它们。
我最近才发现 | - 还不是很了解。
有人可以解释一下,或者 post 一个很好的 link 什么时候最好使用这些方法中的哪一个,如果还有更多的方法?
|...|表示 ABAP 字符串模板。
使用字符串模板,我们可以使用文本、嵌入表达式和控制字符创建字符串。
使用'
定义字符类型文字和非整数:
CONSTANTS some_chars TYPE char30 VALUE 'ABC'.
CONSTANTS some_number TYPE fltp VALUE '0.78'.
使用`
定义字符串类型文字:
CONSTANTS some_constant TYPE string VALUE `ABC`.
使用|
到assemble文本:
DATA(message) = |Received HTTP code { status_code } with message { text }|.
这是 ABAP 允许您定义字符序列的方式的详尽列表。
回答问题的 "when should they be used" 部分:
如果需要尾随空格,`
和 |
很有用(它们被 '
忽略,请参阅 this blog post 了解更多信息,小心 SCN 今天呈现引号不好,所以 post 令人困惑):
DATA(arrival) = `Hello ` && `world`.
DATA(departure) = |Good | && |bye|.
使用字符串模板 (|
) 而不是 `
和 &&
的组合以便于阅读(它仍然很主观,我倾向于更喜欢 |
; 使用我的键盘,|
也更容易获得):
DATA(arrival) = `Dear ` && mother_name && `, thank you!`.
DATA(departure) = |Bye { mother_name }, thank you!|.
有时您别无选择:如果在给定位置需要一个字符串数据对象,那么您必须使用 `
或 |
。还有很多其他情况。
在所有其他情况下,我更喜欢使用 '
(可能是因为我用键盘比 |
更容易获得它)。
尽管其他答案很有帮助,但他们没有提到 '
和 `
之间最重要的区别。
用单引号定义的字符链将被定义为 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.
我见过用这三种方式写的字符串:
lv_str = 'test'
lv_str2 = `test`
lv_str3 = |test|
到目前为止我唯一注意到的是 ' 有时会修剪空格,而 ` 会保留它们。
我最近才发现 | - 还不是很了解。
有人可以解释一下,或者 post 一个很好的 link 什么时候最好使用这些方法中的哪一个,如果还有更多的方法?
|...|表示 ABAP 字符串模板。 使用字符串模板,我们可以使用文本、嵌入表达式和控制字符创建字符串。
使用'
定义字符类型文字和非整数:
CONSTANTS some_chars TYPE char30 VALUE 'ABC'.
CONSTANTS some_number TYPE fltp VALUE '0.78'.
使用`
定义字符串类型文字:
CONSTANTS some_constant TYPE string VALUE `ABC`.
使用|
到assemble文本:
DATA(message) = |Received HTTP code { status_code } with message { text }|.
这是 ABAP 允许您定义字符序列的方式的详尽列表。
回答问题的 "when should they be used" 部分:
如果需要尾随空格,`
和 |
很有用(它们被 '
忽略,请参阅 this blog post 了解更多信息,小心 SCN 今天呈现引号不好,所以 post 令人困惑):
DATA(arrival) = `Hello ` && `world`.
DATA(departure) = |Good | && |bye|.
使用字符串模板 (|
) 而不是 `
和 &&
的组合以便于阅读(它仍然很主观,我倾向于更喜欢 |
; 使用我的键盘,|
也更容易获得):
DATA(arrival) = `Dear ` && mother_name && `, thank you!`.
DATA(departure) = |Bye { mother_name }, thank you!|.
有时您别无选择:如果在给定位置需要一个字符串数据对象,那么您必须使用 `
或 |
。还有很多其他情况。
在所有其他情况下,我更喜欢使用 '
(可能是因为我用键盘比 |
更容易获得它)。
尽管其他答案很有帮助,但他们没有提到 '
和 `
之间最重要的区别。
用单引号定义的字符链将被定义为 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.