當過程(指的是方法,函數,子例程)被調用的時候,實參要被傳遞到形參,傳遞的方法有引用傳遞(pass by reference)和值傳遞(pass by value)兩種,這兩種方式是在過程的參數接口中定義的,對於引用傳遞來說,沒有將本地數據對象傳遞給參數,而是將一個對實參的引用傳遞給過程,所以在過程中被引用的參數是不允許改變的(也就是說傳遞的是實際數據對象的地址,不同的地址對應得是不同的數據對象);但是對於值傳遞來說,會產生一個數據對象的副本,輸出參數和返回值在過程調用的時候會被初始化,而值傳遞更適合魯棒性和數據一致性很重要的場景
在實際應用中當決定形參使用引用傳遞還是值傳遞的時候,主要是基於每種傳輸類型的性能和魯棒性來考慮的,在ABAP中,引用傳遞總是會有更高的性能,這是由於當過程被調用的時候沒有本地的數據對象被存儲也沒有數據傳輸,因此,出於性能的原因引用傳遞更合適。
- 對於引用傳遞來說,輸出參數實際上扮演着輸入/輸出參數的角色。
例如:函數實現如下
FUNCTION ZFM_PASS_TEST. CONCATENATE o_b ' 123' into o_b. ENDFUNCTION.
調用代碼
DATA b(10) TYPE c. b = 'BEF'. CALL FUNCTION 'ZFM_PASS_TEST' IMPORTING o_b = b. WRITE b.
當輸出參數設置為引用傳遞:
輸出結果:BEF 123
當輸出參數設置為值傳遞時:
輸出結果: 123
- 如果過程因為錯誤停止(也就是,由於程序RETURN,EXIT,CHECK后停止),通過引用傳遞的實參會保留被形參傳遞的值,而在值傳遞,當過程停止沒有值被傳遞到實參。
修改函數代碼:
FUNCTION ZFM_PASS_TEST. return. CONCATENATE o_b ' 123' into o_b. ENDFUNCTION.
在引用傳遞情況下結果為空,此時改變了實參的值,而值傳遞情況下執行結果為BEF,並沒有改變實參的值。
