Oop 列出TCL中命名空间中任何类的所有实例
假设我有一个名称空间foo。Oop 列出TCL中命名空间中任何类的所有实例,oop,namespaces,tcl,introspection,Oop,Namespaces,Tcl,Introspection,假设我有一个名称空间foo。 现在,我希望销毁所有oo的所有实例:在foo中对象创建的类,不删除foo(我需要它的“常规”namesapce变量和procs)。 我怎样才能完成它?我知道如何为一个类的partcious名称命名,但希望它适用于所有类。在SCHEME/Perl等语言中,这种区别很容易区分。在Ruby等语言中,您只需将所有非标准类都置空即可。另一个有效选项是搜索。 到目前为止,我发现我需要搜索info commands::foo:中存在的所有列表项,但不在info procs::fo
现在,我希望销毁所有oo的所有实例:在foo中对象创建的类,不删除foo(我需要它的“常规”namesapce变量和procs)。 我怎样才能完成它?我知道如何为一个类的partcious名称命名,但希望它适用于所有类。在SCHEME/Perl等语言中,这种区别很容易区分。在Ruby等语言中,您只需将所有非标准类都置空即可。另一个有效选项是搜索。
到目前为止,我发现我需要搜索
info commands::foo:
中存在的所有列表项,但不在info procs::foo::
中,但是,我不知道它是否“安全”,或者,如果有更优雅的方法来完成它,请
谢谢。直接的方法是浏览名称空间中的命令列表,并检查它们是否是对象:
foreach cmd [info commands ::foo::*] {
if {[info object isa object $cmd]} {
$cmd destroy
# You could also use: rename $cmd ""
}
}
我实际上要做的是使所有对象成为一个特定类的实例(可能通过mixin),然后核化该类,该类将自动删除其所有实例(以及您创建的任何子类)。所讨论的类可能只是一个没有特殊行为的标记