关闭

ABAP using 和 changing 的使用方法 .

316人阅读 评论(0) 收藏 举报
在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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16457次
    • 积分:383
    • 等级:
    • 排名:千里之外
    • 原创:20篇
    • 转载:11篇
    • 译文:0篇
    • 评论:0条