2016-05-23 67 views
5

我有以下一段代碼。函數模塊調用中的函數方法調用,爲什麼只與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. 
+1

這些方法調用稱爲[函數方法](https://help.sap.com/abapdocu_70/en/ABAPMETHODS_FUNCTIONAL.htm),它與[內聯函數或方法](https:// en .wikipedia.org/wiki/Inline_function),其中AFAIK不存在於ABAP中。我寧願不混淆這兩者。而且,至於你的問題 - 「CALL FUNCTION」是一團糟 - 是否足夠的答案? ;-) – vwegert

+1

那麼是不是說[內嵌](https://scn.sap.com/community/abap/blog/2013/05/23/abap-news-for-release-740--inline-聲明)聲明一樣混亂?儘管如此,我還是會重新翻譯一下,因爲這種方法調用的方式從一開始就被命名爲功能。我記得C++中的'inline'函數,它們對於預處理器宏來說是很好的選擇。 – Jagger

回答

2

ABAP的設計也相當糟糕。在re就像函數式方法調用一樣,但不能將它與所有命令結合使用。例如,WRITE命令不能與功能方法調用結合使用。這似乎是某種與函數方法調用「部分兼容」的方式。 我不知道爲什麼(也許悶棍開發人員喝醉了),但這只是我們必須忍受的一個事實。

+1

是的,我同意,但在這種情況下,可以使用功能性方法,但只能用「黑客」來完成。我想知道如果不需要使用'EXPORTING',那麼這裏可能會有什麼含糊不清的地方。 – Jagger

+1

我猜想,這是某種「bug」。但是沒有人知道,在sap的世界裏...... –