`
evangxli
  • 浏览: 224201 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

ABAP using 和 changing 的使用方法

 
阅读更多
在ABAP/4中参数的传递可分成
1. Call By Reference:
传参数时将资料的存放地址(address)传至参数中, 也就是子程序中的参数变量与外部实际变量共享地址内的值, 又称为 Call By Address, 若在子程序中地址中的值改变了, 外部实际变量的值也会跟着改变.

    语法:
      PERFORM  <subr>  [USING <f1> <f2>…] [CHANGING <f1>…]
      FORM  <subr>  [USING <f1> <f2>…] [CHANGING <f1>…]
      Using 之后接在子程序中不会改变的变量, CHANGING接会改变值的变量
      但实际上USING之后的参数在子程序中也可将值改变

      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  SUM.
           SUM  =  NUM1  +  NUM2.
        ENDFORM.

    执行结果: 100   200   300



2. Call By Value
传参数时将数据的值复制一份至另一地址中, 所以在子程序中参数变量值改变, 并不会影响外部实际变量的值.

    语法:
      PERFORM  <subr>  USING  <f1> 
      FORM  <subr>  USING  VALUE(<f1>…)
      使用 VALUE(<f1>)表示 <f1>是 Call By Value的传递
     
      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, 但在子程序结束执行时会将传入的参数值复制一份传回给外部实际变量.

    语法:
      PERFORM  …. CHANGING …. <f1>
      FORM  ….. CHANGING  VALUE(<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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics