如何在tcl中访问以下代码

时间:2015-06-19 10:01:13

标签: tcl

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

set ya0 12  
set ya1 16  
for {set i 0}  {$i < 2} {incr i} {  
puts "$ya{$i}"  
}    

2 个答案:

答案 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
}

文档:forforeachincrlindexlistputsset,{{3 }}

答案 1 :(得分:1)

subst / set

您可以使用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