在同一命名空间中的 proc 之间传递变量
Pass variable between procs in the same namespace
我在同一个命名空间中有两个进程
proc myNamespace::function {} {
set myVar "Hello"
}
proc myNamespace::otherFunction {} {
global myVar
puts $myVar
}
现在由于某种原因这不起作用。我尝试使用 upvar #0
使 myVar
成为全局变量。我已经尝试在 otherFunction
中执行 global myNamespace::myVar
,似乎没有任何效果。我只想让 myVar
成为 myNamespace
命名空间中的一个变量。我怎样才能做到这一点?
尝试
proc myNamespace::function {} {
variable myVar
set myVar "Hello"
}
proc myNamespace::otherFunction {} {
variable myVar
puts $myVar
}
在命令中创建的变量始终是局部变量,除非它们被明确声明为名称空间变量(使用 variable
命令)或全局变量(使用 global
命令)。 Tcl 不使用词法作用域,因此命令永远不会只从周围作用域中获取变量。如果使用命名空间限定的名称,例如 ::foo::bar
(foo
命名空间中的命名空间变量 bar
,它是 ::
命名空间)或::baz
(全局变量baz
)。
我在同一个命名空间中有两个进程
proc myNamespace::function {} {
set myVar "Hello"
}
proc myNamespace::otherFunction {} {
global myVar
puts $myVar
}
现在由于某种原因这不起作用。我尝试使用 upvar #0
使 myVar
成为全局变量。我已经尝试在 otherFunction
中执行 global myNamespace::myVar
,似乎没有任何效果。我只想让 myVar
成为 myNamespace
命名空间中的一个变量。我怎样才能做到这一点?
尝试
proc myNamespace::function {} {
variable myVar
set myVar "Hello"
}
proc myNamespace::otherFunction {} {
variable myVar
puts $myVar
}
在命令中创建的变量始终是局部变量,除非它们被明确声明为名称空间变量(使用 variable
命令)或全局变量(使用 global
命令)。 Tcl 不使用词法作用域,因此命令永远不会只从周围作用域中获取变量。如果使用命名空间限定的名称,例如 ::foo::bar
(foo
命名空间中的命名空间变量 bar
,它是 ::
命名空间)或::baz
(全局变量baz
)。