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

3
如何列出在tclsh实例中加载的所有命名空间?
Chenz
1个回答

7
尝试从TCLer的维基运行此过程。
    proc listns {{parentns ::}} {
        set result [list]
        foreach ns [namespace children $parentns] {
                eval lappend result [listns $ns]
                lappend result $ns
        }
        return $result
    }

当我运行它时,我得到了以下输出:
% 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
%

所以,要获取所有命名空间,只需执行以下操作:
set all_namespaces [concat [listns] "::"]

3
@schlenk 不完全如此;整树遍历在尾调用优化方面并不好。然而 lappend result {*}[listns $ns] $ns 可以改进(并且只需要广泛部署的 8.5 版本)。 - Donal Fellows
它没有列出 :: … 它也只列出了 :: 的子命名空间,还有其他不在 :: 下的命名空间吗? - Crazy Chenz
@CrazyChenz :: 是根命名空间。这难道不回答了你的问题吗? - TrojanName
我已经编辑了问题,展示如何使用proc查找所有命名空间。如果您需要更多信息,请告诉我。 - TrojanName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接