如何将两个参数传递给一个方法?

How to pass two parameters to a method?

我想将 2 个参数设置为 set_params,像这样:

lo_newfal->set_params( ls_nbew-einri,  ls_nbew-falnr) 

可以吗?

不,这在 ABAP 中是不可能的。如果您有多个参数,则必须明确命名它们:

lo_newfal->set_params( imp_param1 = ls_nbew-einri
                       imp_param2 = ls_nbew-falnr ).

这也意味着,您可以按任何顺序调用参数:

lo_newfal->set_params( imp_param2 = ls_nbew-falnr
                       imp_param1 = ls_nbew-einri ). 

但是,如果方法定义中只有一个参数,则可以在不显式命名参数的情况下调用它:

lo_newfal->set_params( ls_nbew-einri ).
call method if_newfal->set_params
    exporting
      p_einri = me->ls_nbew-einri
      p_falnr = me->ls_nbew-falnr

这是在 set_params 中发送 2 个参数的方法。

引用documentation

meth( a ).

This is the short form of:

meth( EXPORTING p = a ).

The method meth can have the following parameters:

  • Either exactly one non-optional input parameter p and any number of optional input parameters
  • Or only optional input parameters from which p is defined as a preferred parameter using PREFERRED PARAMETER

所以不行,不指定目标参数的shorthand方法调用只能在只能明确识别一个参数的情况下使用。 如果存在多个参数,则需要在所有参数都明确命名的地方使用 替代方案 3

meth( p1 = a1 p2 = a2 ... ).

This is the short form of:

meth( EXPORTING p1 = a1 p2 = a2 ... ).

如果存在 IMPORTING 或 CHANGING 参数,同样适用。


与其他语言相比,ABAP更多的是命名参数而不是位置参数。这有一个明显的优势,即不会意外混淆参数的顺序(特别是因为 ABAP 隐式地进行了大量类型转换)并且使可选参数更容易处理。