在TCL

时间:2017-02-13 11:38:08

标签: oop namespaces tcl introspection

让我们说我有一个命名空间foo 现在,我希望销毁所有oo的所有实例:foo中的对象创建的类,没有删除foo(我想要它的'"常规" namesapce变量和procs)。 我怎么能完成它?我知道怎么做一个类的partcioular名称,但希望它适用于所有类。在诸如SCHEME / Perl之类的语言中,这种区别很容易实现。在像Ruby这样的语言中,你只需要取消所有非标准类,并使其成为可能。另一个有效选项就是搜索。
到目前为止,我发现我需要搜索info commands ::foo: 中存在但不在info procs ::foo:: 中的所有列表项。但是,我不知道知道它是否安全"或者是否有一种更优雅的方式来完成它。谢谢。

1 个答案:

答案 0 :(得分:1)

直接的方法是浏览命名空间中的命令列表并检查它们是否是对象:

foreach cmd [info commands ::foo::*] {
    if {[info object isa object $cmd]} {
        $cmd destroy
        # You could also use: rename $cmd ""
    }
}

实际做的是让所有对象成为特定类的实例(可能通过mixin),然后核对该类,它会自动取出所有实例(以及你所做的任何子类。有问题的课程可能只是一个没有特殊行为的标记。