在同一名称空间中的proc之间传递变量

时间:2015-08-10 18:33:55

标签: variables namespaces tcl proc

我在同一名称空间中有两个过程

proc myNamespace::function {} {
  set myVar "Hello"
}

proc myNamespace::otherFunction {} {
  global myVar
  puts $myVar
}

现在由于某种原因,这不起作用。我尝试使用upvar #0使myVar成为全局变量。我尝试在global myNamespace::myVar中执行otherFunction,似乎没有任何效果。我只想让myVar成为myNamespace命名空间中的变量。我怎么能做到这一点?

1 个答案:

答案 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)。

文档:globalprocsetvariable