假设我有一个带有一些导入参数的方法:
*"----------------------------------------------------------------------
*" IMPORTING
*" VALUE(iv_xx) TYPE xx
*" VALUE(iv_xxx) TYPE xxx
*"----------------------------------------------------------------------
我不想直接使用它们,因为在方法内部进行调试时可能无法更改它们的值,并且可能还有更多原因。因此,我声明了要为其分配导入值的新变量。有很多方法可以做到这一点...
我是这样开始的:
DATA lv_xx TYPE xx.
DATA lv_xxx TYPE xxx.
lv_xx = iv_xx.
lv_xxx = iv_xxx.
继续:
DATA:
lv_xx TYPE xx,
lv_xxx TYPE xxx.
lv_xx = iv_xx.
lv_xxx = iv_xxx.
演变为:
DATA:
lv_xx LIKE iv_xx,
lv_xxx LIKE iv_xxx.
lv_xx = iv_xx.
lv_xxx = iv_xxx.
最近发现了一种更加懒惰的方式:
DATA(lv_xx) = iv_xx.
DATA(lv_xxx) = iv_xxx.
现在我想知道:
我可以再进一步一步,以某种方式消除“ DATA(...)”重复吗?
我在寻找
DATA(
lv_xx = iv_xx
lv_xxx = iv_xxx
).
答案 0 :(得分:5)
我看到您的参数已通过值传递,因此内核隐式完成了复制,无需使用辅助变量。您还可以在调试时更改这些按值传递的参数(也许前一段时间在调试器中存在错误,但现在不再存在)。
因此,您可能只对参数通过引用传递有问题,因为它们被分配了“只读”标志。
无论如何,要回答您的问题,一种可能性是使用宏:
CLASS ltc_main DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS
INHERITING FROM cl_aunit_assert.
PRIVATE SECTION.
METHODS test FOR TESTING.
METHODS test2
IMPORTING
VALUE(iv_xx) TYPE i
VALUE(iv_xxx) TYPE i.
ENDCLASS.
CLASS ltc_main IMPLEMENTATION.
METHOD test2.
DEFINE mac_data.
DATA(&1) &2 &3.
END-OF-DEFINITION.
mac_data :
lv_xx = iv_xx,
lv_xxx = iv_xxx.
assert_equals( act = lv_xx exp = 5 ).
assert_equals( act = lv_xxx exp = 9 ).
ENDMETHOD.
METHOD test.
test2( iv_xx = 5 iv_xxx = 9 ).
ENDMETHOD.
ENDCLASS.
但就我个人而言,我不会使用宏,我会声明每个辅助变量,例如DATA(lv_xx) = iv_xx
。
答案 1 :(得分:2)
TYPES:
BEGIN OF input_type,
xx TYPE xx,
xxx TYPE xxx,
END OF input_type.
DATA(input) = VALUE input_type( xx = iv_xx
xxx = iv_xxx ).
答案 2 :(得分:1)
和最终的废话。 ;-)
DEFINE mac_data.
DATA(lv_&1) = iv_&2.
END-OF-DEFINITION.
mac_data : xx, xxx.