首页 > 解决方案 > 如何在 Tcl 的一个参数中使用带有多个变量的 puts?

问题描述

我有一系列列表,例如 a1, a2, a3, a4, ...。我想在循环中打印它们,因此 a 和 i 都是变量。我怎样才能做到这一点?

这行不通。

for {set i 1}....
 puts $a$i
}

提前致谢

标签: loopsprintingtclputs

解决方案


理想情况下,您应该将它们放在关联数组中,否则……</p>

要从名称不是常量的变量中读取,请使用仅带有一个参数set的命令而不是语法。(这种使用早于。)$set$

for {set i 1} {$i <= 3} {incr i} {
    puts [set a$i]
}

但是,最好使用数组(因此变量将有效地命名为a(1),a(2)等而不是a1,a2等)。但这确实意味着对创建变量的代码也进行了更改。

for {set i 1} {$i <= 3} {incr i} {
    puts $a($i)
}

访问变量变量的另一个现实选项是upvar命令。在全局命名空间中并不真正推荐它,但在一个过程中它非常有效。

proc printThree {} {
    for {set i 1} {$i <= 3} {incr i} {
        upvar 1 a$i vbl
        puts $vbl
    }
}

这在执行比打印值更复杂的操作时特别有效。


推荐阅读