2017-02-13 13 views
0

Предположим, что у меня есть пространство имен foo.
Теперь я хочу уничтожить все экземпляры всех объектов: созданных объектов внутри foo, без удаления foo (я хочу, чтобы его «регулярная» переменная namesapce и procs). Как я могу это сделать? Я знаю, как сделать для partcioular имя класса, но хотелось бы, чтобы это было для ВСЕХ классов. В таких языках, как SCHEME/Perl, это различие легко сделать. В таких языках, как Ruby, вы просто сворачиваете все нестандартные классы, и это все. Другой допустимый вариант - поиск.
До сих пор я нашел, что мне нужно найти все элементы списка, которые существуют в 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 "" 
    } 
} 

Что я бы на самом деле сделать, это все объекты Экземпляр конкретный класс (возможно, через mixin), а затем nuke этот класс, который автоматически выведет все его экземпляры (и любые его подклассы, которые вы сделали тоже). Класс, о котором идет речь, может быть маркером без особого поведения.

 Смежные вопросы

  • Нет связанных вопросов^_^