【问题标题】:Listing all instances of any class in namespace in TCL列出 TCL 命名空间中任何类的所有实例
【发布时间】:2017-02-13 11:38:08
【问题描述】:

假设我有一个命名空间 foo。
现在,我希望销毁 foo 中所有 oo:object 创建的类的所有实例,而无需删除 foo(我将想要它的“常规”命名空间变量和 procs)。 我怎样才能完成它?我知道如何为一个类的特定名称做,但希望它适用于所有类。在诸如 SCHEME/Perl 之类的语言中,这种区别很容易做出。在 Ruby 等语言中,您只需取消所有非标准类,仅此而已。另一个有效的选项是搜索。
到目前为止,我发现我需要搜索 info commands ::foo:<em></em> 中存在的所有列表项,但 info procs ::foo:: 中不存在
但是,我不知道它是否“安全”,或者是否存在更优雅的方式来完成它
谢谢。

【问题讨论】:

    标签: oop namespaces tcl introspection


    【解决方案1】:

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

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

    实际上要做的是使所有对象成为特定类的实例(可能通过 mixin),然后核对那个类,这将自动取出它的所有实例(以及任何你也做了它的子类)。有问题的类可能只是一个没有特殊行为的标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 2020-01-02
      • 2017-05-02
      • 1970-01-01
      • 2016-04-24
      相关资源
      最近更新 更多