【发布时间】:2015-06-19 10:01:13
【问题描述】:
我想使用 for 循环获取 ya0,ya1 的值。
但是下面的代码不起作用。
set ya0 12
set ya1 16
for {set i 0} {$i < 2} {incr i} {
puts "$ya{$i}"
}
【问题讨论】:
标签: tcl
我想使用 for 循环获取 ya0,ya1 的值。
但是下面的代码不起作用。
set ya0 12
set ya1 16
for {set i 0} {$i < 2} {incr i} {
puts "$ya{$i}"
}
【问题讨论】:
标签: tcl
你快到了。
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
}
文档:for、foreach、incr、lindex、list、puts、set、variable substitution
【讨论】:
您可以使用 subst 或 set 来评估变量名的值。
副:
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
【讨论】: