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 に答える