n00*_*mer 3 variables nested tcl
基本上,我正在做的是
set i 0
set log_$i "blah blah"
puts $log_$i; # expecting to see "blah blah"
Run Code Online (Sandbox Code Playgroud)
这会返回错误:
无法读取"log_":没有这样的变量
我尝试过各种不同的分组,似乎没什么用
Don*_*ows 11
你遇到的问题是$- 当它遇到一个$(以及许多其他标点符号)时,它会停止.
要使你正在做的工作,你要这样做来读取变量(使用set命令的单参数形式):
puts [set log_$i]
Run Code Online (Sandbox Code Playgroud)
这可以编译为您期望的字节码.
如果可以避免,请不要这样做.
每当你考虑构造这样的变量时,你就更有可能需要使用数组:
set i 0
set log($i) "blah blah"
puts $log($i)
Run Code Online (Sandbox Code Playgroud)
这确实有效.如果你真的需要处理一个名字被构造的变量,那么通常更容易构造一个(通常是局部的)变量别名,如下所示:
set i 0
upvar 0 log_$i v
set v "blah blah"
puts $v
Run Code Online (Sandbox Code Playgroud)
该upvar命令是棘手的东西,并允许各种非常强大的技术.它还使变量的本地别名非常有效(尽管此别名不包括每次查找变量; upvar如果希望别名指向其他内容,则需要重新运行).