我需要打印名称为变量的列表的第 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]
}

这比花哨的方法更好。