我有一个前缀相同的变量。例如:
set prefix1Postfix 89
set prefix2Postfix 56
set prefix3Postfix 56
因此可以通过这种方式迭代它们:
set l [list prefix1 prefix2 prefix3]
foreach item $l {
puts "item = ${{$l}Postfix}"
}
答案 0 :(得分:3)
不,Tcl正在将{$l
部分解释为它遇到的第一个开始和结束括号后的变量:
puts "item = ${{$l}Postfix}"
^---^
该变量也应该是$item
;)大括号也会阻止替换,因此如果使用大括号,Tcl将查找文字$item
。
您可以使用的一种解决方法是为后缀指定变量:
set prefix1Postfix 89
set prefix2Postfix 56
set prefix3Postfix 56
set l [list prefix1 prefix2 prefix3]
set p "Postfix"
foreach item $l {
puts "item = [set $item$p]"
}
答案 1 :(得分:3)
在这种情况下,一般的建议是使用数组
更容易set prefixPostfix(1) 89
set prefixPostfix(2) 56
set prefixPostfix(3) 56
foreach key [array names prefixPostfix] {
do something with $prefixPostfix($key)
}