如何访问proc之外的变量



我正试图了解Tcl变量作用域,但我被一个我认为很简单的概念所束缚:我如何访问我在proc之外定义的变量,但我没有明确传递给proc?

我试图避免设置一堆全局变量,只访问我在特定命名空间中定义的变量。我需要在下面的代码中添加什么,以便proc可以访问变量a,这显然不在proc的范围内?

set a apples
proc myList {b c} {
puts [concat $a $b $c]
}

您可以使用upvar:

set a apples
proc myList {b c} {
upvar a a
puts [concat $a $b $c]
}

或者,将示例扩展一点以显示"源"变量不必存在于全局范围中:

proc p1 {} { set a 10; p2 }
proc p2 {} { upvar 1 a b; puts "in p2, value is $b" }
p1

输出

in p2, value is 10

如果在命名空间中定义了a,则可以使用variable:

namespace eval foo {
set a apples
# OR
# variable a apples
}
proc foo::myList {b c} {
variable a
puts [concat $a $b $c]
}

或者,如果a是在全局范围内创建的,那么您仍然可以使用::在没有global函数的情况下访问它(我将参考这个SO问题):

proc myList {b c} {
puts [concat $::a $b $c]
}

相关内容

  • 没有找到相关文章

最新更新