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为成全局变量了。