我正在尝试围绕 Tcl 变量作用域进行思考,但我坚持认为是一个简单的概念:如何访问我在过程之外定义的变量,但我没有明确地定义该变量传递给进程?
我试图避免设置一堆全局变量,并且只访问我在特定命名空间中定义的变量。我需要在下面的代码中添加什么以便 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
outputs
in p2, value is 10
If a
被定义在命名空间中,你可以使用variable:
namespace eval foo {
set a apples
# OR
# variable a apples
}
proc foo::myList {b c} {
variable a
puts [concat $a $b $c]
}
Or if a
是在全局范围内创建的,您仍然可以访问它而无需global
函数,使用::
(我会参考这个问题对于这个):
proc myList {b c} {
puts [concat $::a $b $c]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)