3

我习惯了 JAVA,因此在 ABAP 中编写此代码时遇到问题。

我用两个参数调用一个方法。它应该返回一个数字,所以我可以保存它。

我想要的是

int result = generate_num(40,5);

int generate_num(int thisNum, int newDigit){
    return thisNum * 10 + newDigit;
}

到目前为止,我在 ABAP 中尝试过这个。

//声明的方法

methods GENERATE_NUM
importing
  !thisNum type I
  !NEWDIGIT type DIGIT_NUMBER_VALUE.

//调用方法

CALL METHOD me->Generate_NUM
   EXPORTING
       thisNUm = 40
       newDigit = 5.

//方法本身

METHOD GENERATE_NUM.

  
DATA: newNum type i.

  If thisnum < 0.
    newNum = thisnum * 10 - newdigit.
  Else.
    newNum = thisnum * 10 + newdigit.
  ENDIF.

  RETURNING VALUE(newNum).   

ENDMETHOD.

但是我迷失在这段代码中,不知道如何返回一个值以及如何将它保存在另一个变量中。

4

1 回答 1

6

这就是您声明带有返回参数的方法的方式:

METHODS generate_num 
  IMPORTING
    thisNum TYPE i   
    newdigit TYPE digit_number_value
  RETURNING
    value(result) TYPE i.

请注意,一个方法只能有一个RETURNING参数,并且该参数必须始终按值传递。

在方法实现中,通过修改声明为返回参数的局部变量来设置返回值:

METHOD generate_num.

  IF thisnum < 0.
    result = thisnum * 10 - newdigit.
  ELSE.
    result = thisnum * 10 + newdigit.
  ENDIF.     

ENDMETHOD.

返回值将是result方法返回时的任何值。就像EXPORTING参数一样。

当您调用一个方法时,您可以使用经典的 CALL 语法,这更像是经验丰富的 ABAP 开发人员习惯使用的语法:

DATA lv_foo TYPE i. " the variable you want to store the return value in

CALL METHOD me->generate_num
   EXPORTING
       thisNUm = 40
       newDigit = 5
   RECEIVING
       result = lv_foo.

或者更类似于您可能习惯的 Java 语法的函数式语法:

lv_foo = me->generate_num( thisNUm = 40 newDigit = 5).

如果该方法不仅具有导入参数,还具有更改或导出参数,则语法如下所示:

lv_foo = me->generate_num( 
   EXPORTING thisNUm = 40 
             newDigit = 5
   CHANGING cv_bar = lv_bar ).
于 2012-09-07T12:07:37.537 回答