在ABAP中,是否可以动态评估字符串模板?
通常,您将在代码中有一些字符串模板,将由编译器检查。 (编译时编译器会检查大括号中的变量)。
但是,是否可以在运行时评估字符串?
所以,而不是:
data(val) = |System ID: { sy-sysid }|.
我希望插入的字符串来自其他地方,例如:
parameter: p_file type string lower case default '/mnt/{ sy-sysid }/file.txt'.
在这种情况下,我希望在运行时评估p_file
的值,以使用运行时值替换变量(sy-sysid
)。
当然,您可以通过使用带有正则表达式的大括号查找所有出现的变量来编程自己的替换,然后使用ASSIGN
计算变量值并将它们替换回字符串,但我正在寻找内置的方法做这个。
对不起,这可能是一个愚蠢的例子,但希望你明白我的意思。 (如果没有,请在评论中告诉我,我会尽力澄清)。
不幸的是,你给出的例子对我没有任何意义。 ABAP字符串模板在运行时进行评估,并在编译时进行类型检查。在您的示例中,始终将SY-SYSID的运行时值写入变量。
我想你想要做的是绕过字符串模板中表达式的编译时检查。请尝试向我们提供您的实际用例,以便我们为您的问题找到更好的解决方案。
但是,我认为这可以帮助您:
就个人而言,我不建议编写类似下面的代码,因为它极易出错,可能误导其他程序员,因为很可能有更好的解决方案。
鉴于您在运行时知道变量的名称,请尝试以下方法:
".. say LV_VARNAME is a charlike variable that contains a
" variable name at runtime.
"NOTE that the variable LV_VARNAME must be visible in the scope of the
"following code.
FIELD-SYMBOLS: <my_var> TYPE any.
ASSIGN (lv_varname) TO <my_var>.
DATA(lv_str) = |The value is { <my_var> }|.
您的代码段中的问题不是使用字符串模板,而是使用PARAMETER行为。它不允许DEFAULT子句中的动态。
要实现您想要的功能,您应该在运行时使用INITIALIZATION
并设置路径值:
parameter: p_file type string lower case.
INITIALIZATION.
p_file = | /mnt/{ sy-sysid }/file.txt |.