我需要打印名称为变量的列表的第 n 个元素(在 foreach 块内)tcl
I need to print the nth element of a list whose name is a variable(inside a foreach block) tcl
我定义了一个具有值列表的变量。我可以使用 [lindex name index] 在 tclsh 中打印它。但是我有一个循环,其中迭代器存储列表的名称。我无法找到解决方法。示例代码如下:
#assuming i have this value stored
set vsxhi [list 1.2 1.4 ]
#loop starts here
set iterator vsxhi
puts "first element of vsxhi needs to be printed in the loop; Im stuck"
puts [lindex $iterator 0]
puts [lindex $$iterator 0]
您可以使用 upvar
获得对列表变量的间接引用:
set vsxhi {1.2 1.4}
foreach iterator {vsxhi} {
upvar 0 $iterator list
puts [lindex $list 0]
}
您也可以使用 eval
,但它更丑陋且更容易出错:
set vsxhi {1.2 1.4}
foreach iterator {vsxhi} {
puts [eval [format {lindex $%s 0} $iterator]]
}
当然,您可以将列表存储在数组或字典中,而不是作为自变量:
set lists(vsxhi) {1.2 1.4}
foreach iterator {vsxhi} {
puts [lindex $lists($iterator) 0]
}
这是最简单的方法。
而且我从来不记得 set
可以使用单个参数...
foreach iterator {vsxhi} {
puts [lindex [set $iterator] 0]
}
这比花哨的方法更好。
我定义了一个具有值列表的变量。我可以使用 [lindex name index] 在 tclsh 中打印它。但是我有一个循环,其中迭代器存储列表的名称。我无法找到解决方法。示例代码如下:
#assuming i have this value stored
set vsxhi [list 1.2 1.4 ]
#loop starts here
set iterator vsxhi
puts "first element of vsxhi needs to be printed in the loop; Im stuck"
puts [lindex $iterator 0]
puts [lindex $$iterator 0]
您可以使用 upvar
获得对列表变量的间接引用:
set vsxhi {1.2 1.4}
foreach iterator {vsxhi} {
upvar 0 $iterator list
puts [lindex $list 0]
}
您也可以使用 eval
,但它更丑陋且更容易出错:
set vsxhi {1.2 1.4}
foreach iterator {vsxhi} {
puts [eval [format {lindex $%s 0} $iterator]]
}
当然,您可以将列表存储在数组或字典中,而不是作为自变量:
set lists(vsxhi) {1.2 1.4}
foreach iterator {vsxhi} {
puts [lindex $lists($iterator) 0]
}
这是最简单的方法。
而且我从来不记得 set
可以使用单个参数...
foreach iterator {vsxhi} {
puts [lindex [set $iterator] 0]
}
这比花哨的方法更好。