TCL从命名空间外的proc调用命名空间变量

时间:2013-03-29 22:06:38

标签: namespaces tcl

我几乎是一个新手,我正在尝试在使用argv的命名空间中设置一些变量,然后从命名空间外的proc调用它们,但我无法理解如何操作这个。我正在尝试使用这样的代码(但显然这是错误的方法):

namespace eval Ns {
    variable spec [lindex $argv 1]
}

proc p {} {
    set spec "::Ns::spec"

}

2 个答案:

答案 0 :(得分:1)

正确的方法是使用variable

proc p {} {
    variable ::Ns::spec
    # ...
}

也可以是upvar

proc p {} {
    upvar #0 ::Ns::spec spec
    # ...
}

或(差不多)就像你做的那样:

proc p {} {
   set spec $::Ns::spec
   # ...
}

如果在proc中更改了变量,则最后一种可能性不会更改变量。

答案 1 :(得分:0)

...或者拨打电话以返回值:

proc Ns::getspec { } {
    variable spec

    return spec;
}