我需要从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
在顶层显示?
对于您发布的代码,将定义更改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
'水平上评估它?
文档:proc、puts、set、source、uplevel、upvar
环境文档
(注意:评论中提到的“Hoodiecrow”是我,我之前用过那个昵称。)