这是我正在尝试做的一个例子。
set t SNS
set ${t}_top [commands that return value]
想要将信息存储在$ {t} _top
puts “${t}_top”
SNS_top (really want the data stored there?)
以为它是:$ {{$ t} _top},也许那是perl但{}内部{}不起作用。
答案 0 :(得分:7)
关于Tcl的一个非常有趣的事情是,您可以动态创建变量名称,就像您在发布的问题中所做的那样。但是,这使得编写它变得棘手并且使您的代码难以理解。
而不是试图弄清楚如何做等价的$ {{$ t} _top},完全避免这个问题可能会更好。您可以使用关联数组来完成此操作。
例如,而不是:
set t SNS
set ${t}_top [commands that return value]
...
puts [set ${t}_top]
这样做:
set t SNS
set top($t) [commands that return value]
...
puts $top($t)
大多数人都认为后一个例子更具可读性。
答案 1 :(得分:3)
尝试
puts [set ${t}_top]
答案 2 :(得分:2)
Tcl中的每一行代码都通过替换阶段(其中变量,命令等被替换)仅运行一次......通常。因此,像
set var1 1
set var2 var1
set var3 $$var2
不会因为var3等于1而结束,因为替代者将“$$ var2”替换为“名为'$ var2'(字面意思)的变量的值”并停止。
你需要做什么才能采取另一种方式或强制进行另一轮替换。另一种方式通常是避免需要第二轮替换(如杰克逊所示):
set var3 [set $var2]
这里,$ var2在替换期间被替换为“var1”...然后[set var1]返回1 ...然后var3被设置为值“1”......你很好
答案 3 :(得分:0)
语法
puts [expr $${t}_top]
也可以,并且避免使用'set'操作,因此语法错误不应该覆盖您的数据。