2017-02-13 6 views
0

私は名前空間fooを持っているとしましょう。
私はfoo内でオブジェクト作成クラスをすべて削除したいと思っていますが、fooを削除しないでください(通常のnamesapce変数とprocsが必要です)。 どうすれば完了できますか?私はクラスのパートシェアーの名前のためにする方法を知っていますが、すべてのクラスのためにそれをしたいです。 SCHEME/Perlなどの言語では、この区別は簡単です。 Rubyなどの言語では、すべての非標準クラスを無効にするだけです。それはit.Another有効なオプションは、検索することです。
これまでのところ、info commands ::foo:に存在するすべてのリスト項目を検索する必要があることがわかりましたが、info procs ::foo::
にはありませんでした。しかし、それが "安全"か、もっとエレガントな方法があるかはわかりませんそれを得ること
ありがとう。TCL内の名前空間にあるすべてのクラスのインスタンスを表示する

答えて

1

直接的な方法は、名前空間内のコマンドのリストを通過し、彼らはオブジェクトをしているかどうかをチェックすることです:私はが実際に行うには、すべてのオブジェクトのインスタンスを作成しているあろうこと

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

(おそらくミックスインを介して)特定のクラスを削除してから、自動的にすべてのインスタンス(およびそれを作成したサブクラス)を自動的に取り出します。問題のクラスは、特別な振る舞いを持たないマーカーに過ぎません。

関連する問題