这是我正在尝试做的一个例子。
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 但 {} 里面的 {} 不起作用。
这是我正在尝试做的一个例子。
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 但 {} 里面的 {} 不起作用。
关于 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)
大多数人都同意后一个示例更具可读性。
尝试
puts [set ${t}_top]
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”的值......你很好。
语法
puts [expr $${t}_top]
也可以,并且避免使用“设置”操作,因此语法错误不应覆盖您的数据。