我想使用for循环获取ya0,ya1的值 但是下面的代码不起作用。
set ya0 12
set ya1 16
for {set i 0} {$i < 2} {incr i} {
puts "$ya{$i}"
}
答案 0 :(得分:5)
你几乎就在那里。
set ya0 12
set ya1 16
for {set i 0} {$i < 2} {incr i} {
puts [set ya$i]
}
这稍微简单一些,但可能不适用于您的代码:
set ya0 12
set ya1 16
foreach varname {ya0 ya1} {
puts [set $varname]
}
在这两种情况下,set
命令用于从名称在运行时都知道的变量中获取值。
如果要从根(ya
)和变量后缀/索引(0,1,...)构造变量名,array
可能很有用:
set ya(0) 12
set ya(1) 16
for {set i 0} {$i < 2} {incr i} {
puts $ya($i)
}
有时当一个人这样做时,真正想要的是一个列表:
set ya [list 12 16]
for {set i 0} {$i < 2} {incr i} {
puts [lindex $ya $i]
}
# or (better)
foreach val $ya {
puts $val
}
答案 1 :(得分:1)
您可以使用subst或set来评估变量名称的值。
SUBST:
set ya0 12
set ya1 16
for {set i 0} {$i < 2} {incr i} {
set varname ya${i}
puts [subst "$$varname"]
}
组:
set ya0 12
set ya1 16
for {set i 0} {$i < 2} {incr i} {
set varname ya${i}
puts [set $varname]
}
输出:
12
16