在TCL中,我有一些名称带有数字后缀的数组(即名称以数字结尾),如下所示:
array set ps0 [ list 0 15.885 1 55.43 1 0.254 2 0.227 3 0.177 ]
array set ps1 [ list 0 6.585 1 56.43 1 0.254 2 0.227 3 0.177 ]
array set ps2 [ list 0 32.485 1 43.13 1 0.254 2 0.227 3 0.177 ]
我需要在 TCL 中迭代这些并获取值,但是,无论我做什么来转义数字后缀,我都无法同时获取数组和内容。我尝试过的一切,例如:
ps$i($i)
"ps$i($i)"
甚至使用类似的集合:
set p ps$i
...无法获取具有数字索引的数组。我收到错误:
Original error: can't read "ps": no such variable
...所有可能的组合。我怎样才能做到这一点(在 TCL 中)?
任何时候你试图在运行时构建一个变量名,这都是一个很大的迹象,表明你做错了,应该使用 a
dict
来代替(通常比数组更容易使用)。在这种情况下,多维字典:变量替换的文档说
$name(index)
:所以这就是为什么类似的东西
ps$i($i)
不适合你的部分原因 - 名称中没有完成变量替换。在该示例中,它正在寻找名为无论如何的数组变量i
。dicts 显然是更好的选择。
有一种方法可以使用数组来完成这项工作。用于
upvar
将动态名称链接到“临时”名称由于数组键是连续整数,我想知道为什么你不使用普通列表。