我需要来自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
?
答案 0 :(得分: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
级别评估吗?
文档:proc,puts,set,source,uplevel,upvar
的文档(注意:评论中提到的'Hoodiecrow'是我,我之前使用过那个昵称。)