如何列出TCL实例中的所有命名空间?

Cra*_*enz 3 namespaces introspection tcl

如何列出tclsh实例中加载的所有命名空间?

Chenz

Tro*_*ame 6

尝试从TCLer的Wiki运行此proc

    proc listns {{parentns ::}} {
        set result [list]
        foreach ns [namespace children $parentns] {
                eval lappend result [listns $ns]
                lappend result $ns
        }
        return $result
    }
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到以下输出:

% listns
::platform ::activestate::teapot::link ::activestate::teapot ::activestate ::tcl
::clock ::tcl::info ::tcl::dict ::tcl::tm ::tcl::mathop ::tcl::unsupported ::tcl
::mathfunc ::tcl::chan ::tcl::string ::tcl
%
Run Code Online (Sandbox Code Playgroud)

因此,要获得所有名称空间,您只需要这样做:

set all_namespaces [concat [listns] "::"]
Run Code Online (Sandbox Code Playgroud)

  • @schlenk不是真的; 在尾部调用优化方面,整树遍历并不是很好.`lappend result {*} [listns $ ns] $ ns`虽然会有所改进(并且只需要广泛部署的8.5). (3认同)