Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 列出TCL中命名空间中任何类的所有实例_Oop_Namespaces_Tcl_Introspection - Fatal编程技术网

Oop 列出TCL中命名空间中任何类的所有实例

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

假设我有一个名称空间foo。
现在,我希望销毁所有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),然后核化该类,该类将自动删除其所有实例(以及您创建的任何子类)。所讨论的类可能只是一个没有特殊行为的标记