ABAP中的like和like行有什么区别?

时间:2014-07-24 04:23:13

标签: abap

我有一个疑问。我可以知道ABAP中LIKELIKE LINE OF之间的区别是什么?我在某个地方看到了宣布工作区域的声明。

wa LIKE it_one
wa LIKE LINE OF it_one

2 个答案:

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