我有以下代码。
REPORT ZZY.
CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
convert_to_xstring
IMPORTING
i_param1 TYPE i
i_param2 TYPE i
RETURNING
VALUE(rv_result) TYPE xstring,
main.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD convert_to_xstring.
ENDMETHOD.
METHOD main.
DATA: lt_binary_tab TYPE STANDARD TABLE OF x.
DATA(lv_result) = convert_to_xstring( i_param1 = 1 i_param2 = 2 ).
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lcl_main=>convert_to_xstring(
EXPORTING
i_param1 = 1
i_param2 = 2
)
TABLES
binary_tab = lt_binary_tab.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_main=>main( ).
函数方法调用不是函数模块调用的一部分,可以这样写。
DATA(lv_result) = convert_to_xstring( i_param1 = 1 i_param2 = 2 ).
但是当我想完全按照上面的说法使用它时
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lcl_main=>convert_to_xstring( i_param1 = 1 i_param2 = 2 )
TABLES
binary_tab = lt_binary_tab.
我收到以下语法错误。
字段" CONVERT_TO_XSTRING("未知。它既不属于其中一个 指定的表,也不是由" DATA"声明。 " DATA"言。
在这种情况下,编译器需要一些指导来区分属性和方法。为什么编译器在没有编写EXPORTING
的情况下让这种情况变得模棱两可?
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lcl_main=>convert_to_xstring( EXPORTING i_param1 = 1 i_param2 = 2 )
TABLES
binary_tab = lt_binary_tab.
答案 0 :(得分:3)
abap的设计非常糟糕。有类似函数方法调用的东西,但你不能将它与所有命令结合使用。例如,WRITE
命令不能与功能方法调用结合使用。这似乎是某种"部分兼容"用函数方法调用。
我不知道为什么(也许是闷闷不乐的人喝醉了),但这只是我们必须忍受的事实。