4

这是我正在尝试做的一个例子。

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 但 {} 里面的 {} 不起作用。

4

4 回答 4

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)

大多数人都同意后一个示例更具可读性。

于 2009-10-23T15:44:02.130 回答
4

尝试

puts [set ${t}_top]
于 2009-10-23T13:06:49.187 回答
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”的值......你很好。

于 2009-10-23T13:39:35.987 回答
1

语法

puts [expr $${t}_top]

也可以,并且避免使用“设置”操作,因此语法错误不应覆盖您的数据。

于 2009-11-03T18:24:29.310 回答