1

我有一个具有相同前缀的变量。例如:

set prefix1Postfix 89
set prefix2Postfix 56 
set prefix3Postfix 56

那么是否可以通过这种方式迭代它们:

set l [list prefix1 prefix2 prefix3]

foreach item $l {
     puts "item = ${{$l}Postfix}"
}
4

2 回答 2

3

不,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]"
}
于 2013-05-30T07:19:26.183 回答
3

在这种情况下,一般建议是使用数组更容易

set prefixPostfix(1) 89
set prefixPostfix(2) 56 
set prefixPostfix(3) 56

foreach key [array names prefixPostfix] {
    do something with $prefixPostfix($key)
}
于 2013-05-30T09:55:58.997 回答