我将创建一个变量名称为的命名空间:
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
但似乎有点麻烦。
答案 0 :(得分:2)
当您这样做:
namespace eval fg {variable $p FirstValue}
括号中的代码在指定的名称空间中评估(全局名称空间变量也可以在其中使用),而$ p变量在“ xx”过程中是本地的。
作为解决方法,您可以传递代码“预先评估”。例如:
namespace eval fg [list variable $p FirstValue]