我有一个疑问。我可以知道ABAP中LIKE
和LIKE LINE OF
之间的区别是什么?我在某个地方看到了宣布工作区域的声明。
wa LIKE it_one
wa LIKE LINE OF it_one
答案 0 :(得分:5)
LIKE LINE OF
表示该变量属于表格行类型。
LIKE
表示该变量与此关键字后面的变量完全相同。
实施例
TYPES: BEGIN OF t_my_example_structure,
my_example_field1 TYPE i,
my_example_field2 TYPE n,
END OF t_my_example_structure.
TYPES tt_my_example_structure TYPE STANDARD TABLE OF t_my_example_structure.
DATA: l_tab_my_example TYPE tt_my_example_structure.
* has structure of row of l_tab_my_example so in this case t_my_example_structure.
DATA: l_str_my_example LIKE LINE OF l_tab_my_example.
* is exactly the same table type as l_tab_my_example so in this case tt_my_example_structure.
DATA: l_tab_like_my_example LIKE l_tab_my_example.
* I use it often for LOOP AT <tab> ASSIGNING <fs>.
FIELD-SYMBOLS: <fs_str_my_example> LIKE LINE OF l_tab_my_example.
答案 1 :(得分:1)
嗯,区别在于您使用USING或TABLES将表传递到子例程。
在第一种情况下,您将获得一个表格,而不是标题,因此WA_LIKE
也是一个表格。
在第二种情况下,IT_DATA
将是一个带标题的表格:这会导致IT_DATA
实际上表示IT_DATA
作为结构,或IT_DATA[]
作为表,取决于具体情况。特别是,DATA ... LIKE IT_DATA
将引用标题,而不是整个内部表。
您可以使用调试器检查:
DATA T_DATA TYPE STRING_TABLE.
PERFORM TEST_01 USING T_DATA.
PERFORM TEST_02 TABLES T_DATA.
FORM TEST_01 USING IT_DATA TYPE STRING_TABLE.
DATA : WA_LIKE LIKE IT_DATA "This is a Table
, WA_LINE LIKE LINE OF IT_DATA.
BREAK-POINT.
ENDFORM.
FORM TEST_02 TABLES IT_DATA TYPE STRING_TABLE.
DATA : WA_LIKE LIKE IT_DATA "This is a String
, WA_LINE LIKE LINE OF IT_DATA.
BREAK-POINT.
ENDFORM.