loops - 如何在 Tcl 的一个参数中使用带有多个变量的 puts?
问题描述
我有一系列列表,例如 a1, a2, a3, a4, ...。我想在循环中打印它们,因此 a 和 i 都是变量。我怎样才能做到这一点?
这行不通。
for {set i 1}....
puts $a$i
}
提前致谢
解决方案
理想情况下,您应该将它们放在关联数组中,否则……</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
}
}
这在执行比打印值更复杂的操作时特别有效。
推荐阅读
- java - 将两个表视图绑定在一起,但由于内容行高不同导致索引不匹配
- git - Git 强制提交和推送,当得到“没有提交”
- android - 从 Google Play 获取付费应用的购买令牌
- swift - “不支持可变枚举案例” swift 5 错误
- r - 有没有比 fread() 更快的方法来读取大数据?
- javascript - 根据数字输入部署多个 div
- spring - Spring boot OneToOne 关系问题
- spring-boot - 尝试向外部端点发送后请求时过早关闭连接
- jquery - 如何创建在选择基本文本时复制的悬停文本?
- azure-devops - 部署池 - 拒绝访问 - 用户名需要管理权限才能执行操作