我有以下一段代碼。函數模塊調用中的函數方法調用,爲什麼只與EXPORTING?
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.
這些方法調用稱爲[函數方法](https://help.sap.com/abapdocu_70/en/ABAPMETHODS_FUNCTIONAL.htm),它與[內聯函數或方法](https:// en .wikipedia.org/wiki/Inline_function),其中AFAIK不存在於ABAP中。我寧願不混淆這兩者。而且,至於你的問題 - 「CALL FUNCTION」是一團糟 - 是否足夠的答案? ;-) – vwegert
那麼是不是說[內嵌](https://scn.sap.com/community/abap/blog/2013/05/23/abap-news-for-release-740--inline-聲明)聲明一樣混亂?儘管如此,我還是會重新翻譯一下,因爲這種方法調用的方式從一開始就被命名爲功能。我記得C++中的'inline'函數,它們對於預處理器宏來說是很好的選擇。 – Jagger