在ABAP/4中参数的传递可分成

在ABAP/4中参数的传递可分成

1. Call By Reference:

 传参数时将资料的存放地址(address)传至参数中, 也就是子程序中的参数变量与外部实际

 变量共享地址内的值, 又称为 Call By Address, 若在子程序中地址中的值改变了, 外部实

 际变量的值也会跟着改变.

 

语法:

     FORM <subr> [USING <f1> <f2>…] [CHANGING <f1>…]

     PERFORM <subr> [USING <f1> <f2>…] [CHANGING <f1>…]

     Using 之后接在子程序中不会改变的变量, CHANGING接会改变值的变量

     但实际上USING之后的参数在子程序中也可将值改变

 

     Example:    
     DATA:  SUM TYPE i VALUE 1,
          NUM1 TYPE i VALUE 1,
          NUM2 TYPE i VALUE 1.
     SUM = 0.
     NUM1 = 100.
     NUM2 = 200.
    
     PERFORM ADD USING NUM1 NUM2 CHANGING SUM.

     WRITE: / NUM1,NUM2,SUM. " SUM ÓÉ 0 ±ä³É 300

     FORM ADD USING NUM1 NUM2 CHANGING SUM.

        SUM = NUM1 + NUM2.
          NUM1 = 300. "²»Äܸ¶Öµ »á±¨´í
        
     ENDFORM.

 

     执行结果:

 

                     100   200   300

 

 

2. Call By Value

 

传参数时将数据的值复制一份至另一地址中, 所以在子程序中参数变量值改变, 并不会影

 

响外部实际变量的值.

 

     语法:

 

          FORM <subr> USING VALUE(<f1>…)

 

          使用 VALUE(<f1>)表示 <f1>是 Call By Value的传递

 

          PERFORM <subr> USING <f1>

 

     Example:

 

     SUM = 0.

 

     NUM1 = 5.

 

     PERFORM MULTI USING NUM1 CHANGING SUM.

 

     WRITE: / NUM1,SUM “NUM1值还是5, SUM 由 0 变成 120

 

     FORM MULTI USING VALUE(NUM1) CHANGING SUM.

 

        SUM = 1.

 

        WHILE NUM1 > 1

 

          SUM = SUM * NUM1.

 

          NUM1 = NUM1 - 1.

 

        ENDWHILE..

 

     ENDFORM.

 

     执行结果:

 

                     5   120

 

 

3. Call By Value and Return Result

 

传入参数值的方式同Call By Value, 但在子程序结束执行时会将传入的参数值复制

 

一份传回给外部实际变量.

 

语法:

 

        FORM ….. CHANGING VALUE(<f1>)

 

        PERFORM …. CHANGING …. <f1>

 

        Example:

 

               SUM = 0.

 

               NUM1 = 100. NUM2=200.

 

               PERFORM ADD USING NUM1 NUM2 CHANGING SUM.

 

               WRITE: / NUM1,NUM2,SUM SUM 由 0 变成 300

 

               FORM ADD USING NUM1 NUM2 CHANGING VALUE(S).

 

                  S = NUM1 + NUM2.

 

                  WRITE: / NUM1,NUM2,SUM 得到结果为 100 200 0

 

               ENDFORM.

 

     执行结果:

 

                100    200     0   “在子程序中 SUM值尚未改变

 

                100   200   300    “返回程序时, 将变量 S的值复制给 SUM

 

                                   “所以 SUM值变成 300

 

 

 

你可能感兴趣的:(在ABAP/4中参数的传递可分成)