6

我有以下一段代码。

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.
4

1 回答 1

4

abap的设计相当糟糕。有类似功能方法调用的东西,但你不能将它与所有命令结合使用。例如,该WRITE命令不能与功能方法调用结合使用。这似乎是某种与函数方法调用的“部分兼容”。我不知道为什么(也许 sap 开发人员喝醉了),但这只是我们必须忍受的事实。

于 2016-05-26T10:35:43.633 回答