我有一个基本上看起来像这样的程序:
set var1 x
set var2 y
set var3 z
proc one {} {
global var1
set var1 "hello"
}
proc two {} {
puts $var1
}
但是,当我调用proc然后调用两个时,输出似乎总是x,而不是“hello”。我在语法错误吗?或者这在tcl中是不可能的?
答案 0 :(得分:0)
您没有像语义错误那样发生语法错误。过程中的变量始终本地(除非使用限定名称指定它们)。这意味着two
正在谈论自己的var1
,而不是全球的proc two {} {
global var1
puts $var1
}
。要使用全局的,您需要明确要求它:
proc two {} {
puts $::var1
}
或者,使用全局变量的完全限定名称:
global
我建议正常使用add_attachment
;它更清晰,更快(假设您使用变量几次,实际代码通常就是这种情况)。