Предположим, что у меня есть пространство имен foo.
Теперь я хочу уничтожить все экземпляры всех объектов: созданных объектов внутри foo, без удаления foo (я хочу, чтобы его «регулярная» переменная namesapce и procs). Как я могу это сделать? Я знаю, как сделать для partcioular имя класса, но хотелось бы, чтобы это было для ВСЕХ классов. В таких языках, как SCHEME/Perl, это различие легко сделать. В таких языках, как Ruby, вы просто сворачиваете все нестандартные классы, и это все. Другой допустимый вариант - поиск.
До сих пор я нашел, что мне нужно найти все элементы списка, которые существуют в info commands ::foo:
, но не в info procs ::foo::
Однако я не знаю, является ли это «безопасным», или если есть более элегантный способ сделав это
Спасибо.Список всех экземпляров любого класса в пространстве имен в TCL
0
A
ответ
1
прямой путь, чтобы пройти через список команд в пространстве имен и проверить, если они объекты:
foreach cmd [info commands ::foo::*] {
if {[info object isa object $cmd]} {
$cmd destroy
# You could also use: rename $cmd ""
}
}
Что я бы на самом деле сделать, это все объекты Экземпляр конкретный класс (возможно, через mixin), а затем nuke этот класс, который автоматически выведет все его экземпляры (и любые его подклассы, которые вы сделали тоже). Класс, о котором идет речь, может быть маркером без особого поведения.