【问题标题】:How can i access below code in tcl我如何在 tcl 中访问以下代码
【发布时间】: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


    【解决方案1】:

    你快到了。

    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
    }
    

    文档:forforeachincrlindexlistputssetvariable substitution

    【讨论】:

      【解决方案2】:

      subst / 设置

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-29
        • 2015-07-14
        • 1970-01-01
        相关资源
        最近更新 更多