abap 子函數調用 using changing 使用 例子
abap腳本:
REPORT ZYHJCALLFUNCUSINCHANG.
" USING CHANGING 不加VALUE 都改變原值
" using VALUE 不改變原值,而CHANGING VALUE 改變原值。
DATA P1 TYPE I.
DATA P2 TYPE I.
P1 = 1. P2 = 2.
WRITE: /'字段執行前'. WRITE: / P1,P2.
PERFORM TEST USING P1 CHANGING P2.
WRITE: /'字段執行後'. WRITE: / P1,P2.
*Form Test Using Value(p1) Changing Value(p2). "傳值,不是傳地址但是返回時changeing改變。
*P1 = 3. P2 = 4 .
*Write: /'字段執行中'. Write: / P1,p2.
*Endform.
*執行結果:字段執行前
* 1 2
*字段執行中
* 3 4
*字段執行後
* 1 4
*FORM TEST USING P1 CHANGING P2 . " "傳地址,不是傳值 都改變!!!
*P1 = 3. P2 = 4 .
*WRITE: /'字段執行中'. WRITE: / P1,P2.
*ENDFORM.
*執行結果:字段執行前
* 1 2
*字段執行中
* 3 4
*字段執行後
* 3 4
FORM TEST USING value(P3) CHANGING value(P4). "傳地址,雖然參數P2有改變,但是返回時仍然是按照P4返回的,
P1 = 5. P2 = 4 . "而P4沒有 改變,導致形參P2還是原來的值。
WRITE: /'字段執行中'. WRITE: / P1,p3,P2,p4.
ENDFORM.
*執行結果:字段執行前
* 1 2
*字段執行中
* 5 1 4 2
*字段執行後
* 5 2 "第一個參數P1,執行完後 爲什麼P1是 5 而不是 1,不是傳值嗎 ? 因爲有這個,P1 = 5. 加之P1爲成全局變量了。
*FORM TEST USING P3 value(P4). "
*P1 = 3. P2 = 5 . "
*WRITE: /'字段執行中'. WRITE: / P1,p3,P2,p4.
*ENDFORM.
*執行結果:字段執行前
* 1 2
*字段執行中
* 3 3 5 2
*字段執行後
* 3 5 "第二個參數執行完後 爲什麼P2是 5 而不是 2,這裏用了USING 且有 VALUE,應該是傳值啊?因爲有這個,P2 = 5. 加之P2爲成全局變量了。