TCL 获取二级变量的值
TCL Get the value of a second level variable
我遇到了 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 x1y {1 2 3 4}
set x2y {10 11 12 13}
for {set i 1} {$i <= 2} {incr i} {
foreach e [set x${i}y] {
puts $e
}
}
读取名称不是常量的变量的方法是使用集合的单参数形式:
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
或 subst
;如果您不小心,这些命令会产生副作用,可能会损害代码的稳定性。绝对不是像这样的情况。 (此外,它们会更慢,因为它们迫使 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 x1y {1 2 3 4}
set x2y {10 11 12 13}
for {set i 1} {$i <= 2} {incr i} {
foreach e [set x${i}y] {
puts $e
}
}
读取名称不是常量的变量的方法是使用集合的单参数形式:
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
或 subst
;如果您不小心,这些命令会产生副作用,可能会损害代码的稳定性。绝对不是像这样的情况。 (此外,它们会更慢,因为它们迫使 Tcl 更频繁地重新编译其内部字节码。我上面提供的所有解决方案都没有这种错误特征。)