具有变量变量的名称空间

时间:2019-05-24 16:26:25

标签: namespaces tcl

我将创建一个变量名称为的命名空间:

proc show {} {
    puts $fg::varName
    puts $fg::x
}
set p "varName"
namespace eval fg {variable $p FirstValue}
namespace eval fg {variable x "Second variable"}
show

我认为这行得通,因为它在过程之外。如果我更改代码:

proc show {} {
    puts $fg::varName
    puts $fg::x
}
# set p ""
proc xx {} {
#   global p
    set p "varName"
    namespace eval fg {variable $p FirstValue}
    namespace eval fg {variable x "Second variable"}
    show
}
xx

我收到错误消息,即无法读取“ p”:没有这样的变量。 如果我取消评论就可以 set p ""global p 但似乎有点麻烦。

1 个答案:

答案 0 :(得分:2)

当您这样做:

namespace eval fg {variable $p FirstValue}

括号中的代码在指定的名称空间中评估(全局名称空间变量也可以在其中使用),而$ p变量在“ xx”过程中是本地的。

作为解决方法,您可以传递代码“预先评估”。例如:

namespace eval fg [list variable $p FirstValue]