Variables $内的Tcl变量替换:
如果我定义以下列表:Variables $内的Tcl变量替换:,variables,tcl,substitution,Variables,Tcl,Substitution,如果我定义以下列表: set ::listofvariablesn [list {"inputfile" "Input file"}] set ::inputfile "Somefile or numbers" 我可以使用以下方法检查变量::inputfile是否存在: foreach a $::listofvariablesn { if {[info exists ::[lindex $a 0]]} { puts "Ok" } } 但我无法使用以下命令访问::in
set ::listofvariablesn [list {"inputfile" "Input file"}]
set ::inputfile "Somefile or numbers"
我可以使用以下方法检查变量::inputfile是否存在:
foreach a $::listofvariablesn {
if {[info exists ::[lindex $a 0]]} {
puts "Ok"
}
}
但我无法使用以下命令访问::inputfile的值:
foreach a $::listofvariablesn {
if {[checkvl "Input file" $::[lindex $a 0] 1 0 0 0]} {
puts "Ok"
}
}
我得到了一个错误:
无法读取“:”:没有此类变量
有没有办法完成这个替换?我的意思是将$::[lindex$a 0]转换成$::inputfile,这样我就可以访问::inputfile的值
非常感谢这个
$
是一个快捷方式,不能做双重替换。
使用set
命令:
if {[checkvl "Input file" [set ::[lindex $a 0]] 1 0 0 0]} {
除了
$
的正楷形式,即set
命令的单参数形式之外,还可以使用upvar 0
创建变量别名(具有已知名称)。例如:
upvar 0 $a b
puts "exists: [info exists b]"
puts "value: $b"
对变量
b
所做的任何操作(除了更改upvar
)都将对名为$a
的变量执行 谢谢你,布拉德。这很好用。明天早上更改代码。