abap 子函數調用 using changing 使用 例子

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爲成全局變量了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章