Tcl NameSpaces:如何将全局变量与其他命名空间分开?

时间:2014-03-27 15:33:49

标签: namespaces tcl

为什么这不起作用? (我希望'put $ top'打印“vega”):

set top vega

namespace eval ::other {set top NULL}

puts $top ;

输出:

NULL

1 个答案:

答案 0 :(得分:2)

答案详见:http://tcl.tk/man/tcl8.5/TclCmd/namespace.htm#M26

因为您没有将“top”声明为该命名空间中的变量,所以set命令继续到全局命名空间以解析名称top

你可能打算

set top vega
namespace eval ::other {
    variable top
    set top NULL
}
puts $top          ;# outputs "vega"
puts $other::top   ;# outputs "NULL"

但请阅读顶部所有皱纹的链接