我从VLT音序器脚本
中看到了这段代码(部分)proc cnoseqImgAcqMoveToPixel {parArrays obsInfo} {
foreach parArray $parArrays {upvar $parArray $parArray}
...
}
我想知道是否有人能告诉我{ upvar $parArray $parArray}
的目的是什么。
答案 0 :(得分:1)
没有足够的信息可以绝对肯定,但我可以猜测。我猜测parArrays
是一个数组变量名列表,那些数组变量属于cnoseqImgAcqMoveToPixel
调用者的范围。然后foreach
循环遍历数组变量名称列表并调用upvar
。 upvar
命令在调用堆栈的某处(在本例中为一级)获取变量的名称,并创建引用它的局部变量。在这种情况下,局部变量名称与传入的数组变量名称相同。净效果是获取调用者范围内的数组变量列表,并将它们转换为同名的局部变量。
在Tcl中,数组实际上是由字符串索引的变量集合,它们不能通过值传递。所以使用upvar
是通过引用传递数组的习惯用法。在这种情况下,看起来像是通过引用访问一组数组。