tcl - TCL 获取二级变量的值
问题描述
我遇到了一个 TCL 问题。我想在保持格式(列表)的情况下访问二级变量的内容。请看我的代码:首先,我声明变量内容
set x1y {1 2 3 4}
set x2y {10 11 12 13}
在我执行一个 for 循环之后
for { i 0} {i < 4} { incr i}
我想在xy
变量中x1y
保留列表格式的内容
set xy [eval ["x${i}y"]]
foreach x $xy {
....
}
你有什么想法/建议。我尝试了 subst 但它不保留格式。先感谢您
解决方案
从名称不是常量的变量中读取的方法是使用 set 的单参数形式:
set x1y {1 2 3 4}
set x2y {10 11 12 13}
foreach i {1 2} {
foreach val [set x${i}y] {
puts "$i --> $val"
}
}
但是,使用 为变量创建别名通常更容易upvar 0
,如下所示:
foreach i {1 2} {
upvar 0 x${i}y xy
foreach val $xy {
puts "$i --> $val"
}
}
并且在几乎所有你这样做的情况下,你应该考虑使用数组来代替(记住 Tcl 的数组是关联数组;你可以使用复合键以及简单的整数):
set xy(1) {1 2 3 4}
set xy(2) {10 11 12 13}
foreach i {1 2} {
foreach val $xy($i) {
puts "$i --> $val"
}
}
你可能想尽量避免使用eval
orsubst
来做这类事情;如果您不小心,这些命令会产生副作用,可能会损害代码的稳定性。绝对不是这样的情况。(此外,它们会变慢,因为它们会迫使 Tcl 更频繁地重新编译其内部字节码。我上面介绍的所有解决方案都没有这种错误功能。)
推荐阅读
- php - 如何在 Laravel 中使用 select In 查询
- c# - 将浮点字节数组转换为十进制
- python - 如何用 PANDAS 插值数据和角度
- c# - ASP .NET Core 2.1 Razor Pages 锚标记助手为 asp-route 生成空 href
- excel - 如何根据单元格地址在另一个 Wbk 中查找串联引用
- .net - 如何根据编译日期设置程序集和文件版本?
- ruby-on-rails - 在 simple_form_for rails 中设置默认时间戳
- reactjs - 在 React HOC 中使用 Redux 连接
- python - 机器学习引擎 - 不使用 GPU
- android - 搜索具有多列的 sqlite