2013-11-23 3 views
0

Кто-то использовал фразу «уничтожить класс», и я был настроен скептически, что это что-то значило, и решил сделать поиск, и похоже, что разрушающие классы кажутся реальной концепцией, как показано в How to properly destroy a classЧто значит уничтожить класс

Что значит уничтожить класс?
Как я могу уничтожить класс в Ruby? (если это имеет смысл вообще)

+0

Вы не должны поощрять классовую войну. –

ответ

3

Скорее разрушение, вы можете remove the constant. Помните, class (и) - это не что иное, как константы.

class C;end 
C.name # => "C" 

self.class.send(:remove_const,:C) 
C.name # uninitialized constant C (NameError) 

Когда вы делаете class C;end, это означает, что вы создаете экземпляр Class (постоянного назначения) и назначение этого экземпляра к постоянному C. #remove_const метод, фактически выполняющий un-assign, и возвращает экземпляр Class, который вы можете назначить другой константе.

class C 
    def self.foo 
    12 
    end 
end 

C.foo # => 12 
M = self.class.send(:remove_const,:C) 
M.foo # => 12 
C.foo # uninitialized constant C (NameError) 
1

Самое важное правило для изучения заключается в том, что в Ruby уничтожающие классы ничем не отличаются от уничтожения любых других объектов. Обычно у вас есть несколько фиксированных классов, назначенных константам, которые никогда не уничтожаются. Это хорошая, но довольно непростая практика создания параметризованных подклассов, а также класса Class, который может быть уничтожен во время выполнения программы, как и любой другой объект. Само разрушение выполняется сборщиком мусора, который обычно не касается программиста.

Примечание. В статье, на которой вы ссылаетесь, не говорится об уничтожении классов, а о создании и уничтожении экземпляров.

+0

Но не являются ли классы классов класса Class сами? – user2422869

+0

Да, они есть. Даже класс 'Class' сам является экземпляром класса' Class', то есть самого. –

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