以下命令按预期运行:
lappend {*}{arr 1}
puts [lindex $arr 0]
现在我正在尝试制作一个变量" {*} {arr 1}"像这样:
set X "{*}{arr 1}"
lappend $X
但这不起作用,似乎$ X被视为一个整体值,参数扩展无效。
因此要求参数扩展不能通过变量吗?
答案 0 :(得分:3)
{*}
是Tcl的语法特征(从Tcl 8.5开始),就像[
... ]
,"
... "
或{{1是的。你必须在脚本中写它才能算作参数扩展;否则它只是一个由三个字符组成的序列。
如果你想要像
这样的东西$
要工作,您需要通过set X "{*}{arr 1}"
lappend $X
:
eval
请注意,这意味着set X "{*}{arr 1}"
eval lappend $X
实际上包含一个脚本片段;这可能会产生各种“有趣”的后果。试试这个尺寸:
X
在现代Tcl中使用set X "{*}{arr 1};puts hiya"
eval lappend $X
通常表明你会以错误的方式处理事情;旧脚本中的关键用途是执行类似于我们现在使用eval
的操作。
答案 1 :(得分:1)
不,在双引号内,{
和}
实际上已失去意义,{*}
也将失去意义。请注意,puts "{}"
和puts {}
不同。
我能想到的最接近你要做的事情就是使用这样的东西:
set X {arr 1}
lappend {*}$X
因此,如果您现在执行puts [lindex $arr 0]
,则会获得1
作为输出。