如果我定义以下列表:
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
的值非常感谢
答案 0 :(得分:2)
$
是一种快捷方式,不能进行双重替换。
使用set
命令:
if {[checkvl "Input file" [set ::[lindex $a 0]] 1 0 0 0]} {
答案 1 :(得分:0)
除$
的缩写形式set
命令的单参数形式外,还可以选择使用{{创建变量的别名(具有已知名称) 1}}。例如:
upvar 0
您对变量upvar 0 $a b
puts "exists: [info exists b]"
puts "value: $b"
执行的任何操作(更改b
除外)都将对upvar
命名的变量执行。