我在同一名称空间中有两个过程
proc myNamespace::function {} {
set myVar "Hello"
}
proc myNamespace::otherFunction {} {
global myVar
puts $myVar
}
现在由于某种原因,这不起作用。我尝试使用upvar #0
使myVar
成为全局变量。我尝试在global myNamespace::myVar
中执行otherFunction
,似乎没有任何效果。我只想让myVar
成为myNamespace
命名空间中的变量。我怎么能做到这一点?
答案 0 :(得分:3)
尝试
proc myNamespace::function {} {
variable myVar
set myVar "Hello"
}
proc myNamespace::otherFunction {} {
variable myVar
puts $myVar
}
在命令中创建的变量总是局部变量,除非明确声明它们是命名空间变量(使用variable
命令)或全局变量(使用global
命令)。 Tcl不使用词法作用域,因此命令永远不会从周围的作用域中获取变量。如果在::foo::bar
命名空间中使用bar
(命名空间变量foo
,那么也可以使用没有声明的命名空间或全局变量。 {1}}名称空间)或::
(全局变量::baz
)。