参数值传递的三种方式
ABAP/4的参数传递方式分为3种:
1.Call By Reference:
传递参数时将数据的存放地址(address)传至参数中, 也就是子程序中的参数变量与外部实际变量共享地址内的值, 又称为 Call By Address, 若在子程序中地址中的值改变了, 外部实际变量的值也会跟着改变.
语法: FORM
PERFORM
Using 之后接在子程序中不会改变的参数 CHANGING接会改变值的参数,但实际上USING之后的参数在子程序中也可将值改变。
例子:
DATA : SUM TYPE I VALUE 0,
N1 TYPE I VALUE 100,
N2 TYPE I VALUE 200.
PERFORM ADD USING N1 N2 CHANGING SUM.
WRITE :/ N1,N2,SUM.
FORM ADD USING A1 A2 CHANGING S.
S = A1 + A2.
ENDFORM.
2.Call By Value
传递参数时将数据的值复制一份至另一地址中, 所以在子程序中参数变量值改变, 并不会影响外部实际参数的值.
语法:FORM
使用 VALUE(
PERFORM
例子:
DATA : SUM TYPE I,
N1 TYPE I VALUE 5.
PERFORM MULTI USING N1 CHANGING SUM.
WRITE :/ N1,SUM.
FORM MULTI USING VALUE(I) CHANGING S.
S = 1.
WHILE I > 1.
S = S * I.
I = I - 1.
ENDWHILE.
ENDFORM.
3.Call by Value and Return Result.
传入参数值的方式同Call By Value, 但在子程序结束执行时会将传入的参数值复制一份传回给外部实际参数.
语法:FORM ….. CHANGING VALUE(
PERFORM …. CHANGING ….
例子:
DATA : SUM TYPE I ,
N1 TYPE I VALUE 100,
N2 TYPE I VALUE 200.
PERFORM ADD USING N1 N2 CHANGING SUM.
WRITE :/ N1,N2,SUM.
FORM ADD USING I1 I2 CHANGING VALUE(S).
S = I1 + I2.
WRITE :/ N1,N2,SUM.
ENDFORM.