如何在tcl中访问以下代码

Yas*_*ash 1 tcl

我想使用for循环获取ya0,ya1的值.
但是下面的代码不起作用.

set ya0 12  
set ya1 16  
for {set i 0}  {$i < 2} {incr i} {  
puts "$ya{$i}"  
}    
Run Code Online (Sandbox Code Playgroud)

Pet*_*rin 5

你快到了.

set ya0 12  
set ya1 16  
for {set i 0} {$i < 2} {incr i} {  
    puts [set ya$i]
}  
Run Code Online (Sandbox Code Playgroud)

这稍微简单一些,但可能不适用于您的代码:

set ya0 12  
set ya1 16  
foreach varname {ya0 ya1} {
    puts [set $varname]
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,该set命令用于从名称在运行时之前未知的变量中获取值.

如果要从root(ya)和变量后缀/索引(0,1,...)构造变量名,array则可能很有用:

set ya(0) 12  
set ya(1) 16  
for {set i 0} {$i < 2} {incr i} {  
    puts $ya($i)
}  
Run Code Online (Sandbox Code Playgroud)

有时当一个人这样做时,真正想要的是一个列表:

set ya [list 12 16]
for {set i 0} {$i < 2} {incr i} {  
    puts [lindex $ya $i]
}
# or (better)
foreach val $ya {
    puts $val
}
Run Code Online (Sandbox Code Playgroud)

文档:for,foreach,incr,lindex,list,puts,set,variable substitution