upvar如何在" foreach parArray $ parArrays {upvar $ parArray $ parArray}"

时间:2015-10-13 15:41:08

标签: tcl

我从VLT音序器脚本

中看到了这段代码(部分)
proc cnoseqImgAcqMoveToPixel {parArrays obsInfo} {    
   foreach parArray $parArrays {upvar $parArray $parArray}
   ...
}

我想知道是否有人能告诉我{ upvar $parArray $parArray}的目的是什么。

1 个答案:

答案 0 :(得分:1)

没有足够的信息可以绝对肯定,但我可以猜测。我猜测parArrays是一个数组变量名列表,那些数组变量属于cnoseqImgAcqMoveToPixel调用者的范围。然后foreach循环遍历数组变量名称列表并调用upvarupvar命令在调用堆栈的某处(在本例中为一级)获取变量的名称,并创建引用它的局部变量。在这种情况下,局部变量名称与传入的数组变量名称相同。净效果是获取调用者范围内的数组变量列表,并将它们转换为同名的局部变量。

在Tcl中,数组实际上是由字符串索引的变量集合,它们不能通过值传递。所以使用upvar是通过引用传递数组的习惯用法。在这种情况下,看起来像是通过引用访问一组数组。