任务是创建具有动态名称的变量。不是类型,而是名字!
向我提出的所有方式(例如通过cl_abap_typedescr
和cl_abap_elemdescr
类)都是无用的。
我想在语义上实现这样的东西,但是这种语法不正确:
CREATE DATA (name) TYPE var_type.
有什么解决办法吗?
任务是创建具有动态名称的变量。不是类型,而是名字!
向我提出的所有方式(例如通过cl_abap_typedescr
和cl_abap_elemdescr
类)都是无用的。
我想在语义上实现这样的东西,但是这种语法不正确:
CREATE DATA (name) TYPE var_type.
有什么解决办法吗?
我认为如果将“名称”声明为字段符号,它将起作用。
效果 该语句声明了一个名为 的符号字段。在运行时,您可以使用 ASSIGN 将具体字段分配给字段符号。使用字段符号执行的所有操作都会直接影响分配给它的字段。
试试这个:
data:
b_1 type i,
b_2 type i,
b_3 type i,
b_4 type i,
num1(1) type n,
fldname type fieldname.
FIELD-SYMBOLS:
<fld> type i.
do 4 times.
num1 = sy-index.
CONCATENATE 'B_' num1 into fldname.
ASSIGN (fldname) to <fld>.
<fld> = sy-index.
enddo.
write: b_1, b_2, b_3, b_4.
您基本上不能使用任何一种 ABAP 语法来做到这一点。您当然可以编写一个使用内部表来模拟这种情况的函数,就像这样(我省略了错误处理)
class cl_dyn_variable definition.
public section.
methods create_variable
importing i_name type clike
i_type type string.
methods get_variable
importing i_name type clike
returning value(r_data) type ref to data.
private section.
types: begin of lty_s_variable,
name type string,
r_data type ref to data,
end of lty_s_variable,
lty_t_variable type sorted table of lty_s_variable with unique key name.
data mt_variable type lty_t_variable.
endclass.
class cl_dyn_varaible implementation.
method create_varaible.
data ls_new_var type lty_s_variable.
ls_new_var-name = i_name.
create data ls_new_var-r_data type (i_type).
insert ls_new_var into table mt_variable.
endmethod.
method get_variable.
data lsr_var type ref to lty_s_variable.
read table mt_variable with table key name = i_name
reference into lsr_var.
if sy-subrc <> 0.
"...error handling
else.
r_data = lsr_var->r_data.
endif.
endmethod.
endclass.