我有一个具有相同前缀的变量。例如:
set prefix1Postfix 89
set prefix2Postfix 56
set prefix3Postfix 56
那么是否可以通过这种方式迭代它们:
set l [list prefix1 prefix2 prefix3]
foreach item $l {
puts "item = ${{$l}Postfix}"
}
我有一个具有相同前缀的变量。例如:
set prefix1Postfix 89
set prefix2Postfix 56
set prefix3Postfix 56
那么是否可以通过这种方式迭代它们:
set l [list prefix1 prefix2 prefix3]
foreach item $l {
puts "item = ${{$l}Postfix}"
}
不,Tcl 将该{$l
部分解释为它遇到的第一个左大括号和右大括号之后的变量:
puts "item = ${{$l}Postfix}"
^---^
变量也应该是$item
;) 大括号也防止替换,因此$item
如果您使用大括号,Tcl 将查找文字。
您可以使用的一种解决方法是将变量分配给后缀:
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]"
}
在这种情况下,一般建议是使用数组更容易
set prefixPostfix(1) 89
set prefixPostfix(2) 56
set prefixPostfix(3) 56
foreach key [array names prefixPostfix] {
do something with $prefixPostfix($key)
}