1

我需要从source'd 文件中'upvar' 变量(我不知道他们的名字)

假设我有一个 TCL 文件,其中包含:

set v 7

现在这个:

proc p {} {
  source t.tcl
}

p

puts $v
# => can't read "v": no such variable

文件 t.tcl 不得更改。

我也无法了解t.tcl. 假设它作为env变量传递。如何v在顶层显示?

4

1 回答 1

3

对于您发布的代码,将定义更改p为:

proc p {} {
    upvar 1 v v
    source t.tcl
}

或(专门将变量连接到顶层:

proc p {} {
    upvar #0 v v
    source t.tcl
}

(注意:语法荧光笔认为字符串"#0 v v"是注释,但事实并非如此。)

成员env是全球性的,所以你不会在那里遇到这个问题。

但是,如果您不知道变量的名称,那就不那么简单了,因为upvar一旦变量存在,您就不能成为变量。

source是否可以在顶层评估命令,如下所示:

proc p {} {
    uplevel #0 source t.tcl
}

(同样,不是评论。)

或者你必须在p'水平上评估它?

文档:procputssetsourceuplevelupvar

环境文档

(注意:评论中提到的“Hoodiecrow”是我,我之前用过那个昵称。)

于 2014-07-17T22:06:27.080 回答