多变量声明和初始化
Multi-variable declaration and initialization
假设我有一个带有几个导入参数的方法:
*"----------------------------------------------------------------------
*" 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
).
我看到你的参数是按值传递,所以内核隐式地做了一个拷贝,不需要使用辅助变量。您还可以在调试时更改这些按值传递的参数(也许前段时间调试器中存在错误,但现在已经不存在了)。
因此,您可能只遇到参数 通过引用传递 的问题,因为它们被分配了一个 "read-only" 标志。
无论如何,要回答你的问题,一种可能是使用宏:
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
。
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 ).
和最终的废话。 ;-)
DEFINE mac_data.
DATA(lv_&1) = iv_&2.
END-OF-DEFINITION.
mac_data : xx, xxx.
假设我有一个带有几个导入参数的方法:
*"----------------------------------------------------------------------
*" 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
).
我看到你的参数是按值传递,所以内核隐式地做了一个拷贝,不需要使用辅助变量。您还可以在调试时更改这些按值传递的参数(也许前段时间调试器中存在错误,但现在已经不存在了)。
因此,您可能只遇到参数 通过引用传递 的问题,因为它们被分配了一个 "read-only" 标志。
无论如何,要回答你的问题,一种可能是使用宏:
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
。
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 ).
和最终的废话。 ;-)
DEFINE mac_data.
DATA(lv_&1) = iv_&2.
END-OF-DEFINITION.
mac_data : xx, xxx.