VALUE主要是用来给一个结构、内表等对象初始化值。主要有下面三个方式:
...value dtype\#() 构造一个任意类型的初始值
...value dtype\#( comp1 = a1 comp2 = a2 ....) 构造一个任意类型的结构体的初始值
...value dtype\#( ( ...) (...) ... )... 构造一个任意类型的内表的初始值
上面dtype\# 意思是可以指定一个dtype的类型或者直接用#,用#时,其类型和被赋值的对象的数据类型一样。
如果value后的dtype是个表,则必须指定key值,或者声明为empty key。
1.
DATA itab TYPE RANGE OF i.
itab = VALUE #( sign = 'I' option = 'BT' ( low = 1 high = 10 )
( low = 21 high = 30 )
( low = 41 high = 50 )
option = 'GE' ( low = 61 ) ).
cl_demo_output=>display( itab ).
2.
DATA itab TYPE TABLE OF i.
itab = VALUE #( ( 1 )
( 2 )
( 3 ) ).
*itab = VALUE #( ( 4 ) ( 5 ) ( 6 ) ).
cl_demo_output=>display( itab ).
3.
TYPES ty_date TYPE TABLE OF string WITH EMPTY KEY.
DATA(lt_date) = VALUE ty_date( ( | { CONV d( sy-datlo - 1 ) DATE = ENVIRONMENT } | )
( | { sy-datlo DATE = ENVIRONMENT } | )
( | { CONV d( sy-datlo + 1 ) DATE = ENVIRONMENT } | ) ).
cl_demo_output=>display( lt_date ).
这里DATE = environment是用来格式化日期的,表达式里必须有日期类型d才能使用。environment对应的值是CL_ABAP_FORMAT=>D_ENVIRONMENT
另外对日期进行加减时还需conv。如果第二行不用DATE = environment,那么输出就是20160606这样的格式。关于嵌入表达式可以F1看看
4.
DATA:
BEGIN OF struct1,
col1 TYPE i VALUE 11,
col2 TYPE i VALUE 12,
END OF struct1.
DATA:
BEGIN OF struct2,
col2 TYPE i VALUE 22,
col3 TYPE i VALUE 23,
END OF struct2.
*struct2 = CORRESPONDING #( struct1 ). “ 12 0
MOVE-CORRESPONDING struct1 TO struct2. “ 12 23