2013-08-22 4 views
12

Учитывая родительский класс, есть ли способ вставить код для каждого подкласса при загрузке? то есть.Ruby: Выполнить код для каждого подкласса

Дано: ParentClass, как вставить код так:

class ChildClass < ParentClass 
    execute_function 

    ... 
end 

для всех дочерних классов ParentClass?

+0

Что делать, если эти классы уже загружены? Что должен делать этот код? –

+0

@SergioTulentsev Err, как можно загрузить класс, если его родительский элемент не загружен? – meagar

+0

@meagar: поздно ночью, и я задаю глупые вопросы :) –

ответ

13

В ParentClass переопределить унаследованный метод

class ParentClass 
    def self.inherited(subclass) 
     execute_function 
     super 
    end 
    ... 
end 

См: http://ruby-doc.org/core-2.0/Class.html#method-i-inherited

+0

wow ... потратил так много времени на это. было бы правильно использовать 'super (subclass)' для безопасности правильно? – s12chung

+2

Вы могли бы, но это не обязательно. 'super' без аргументов вызовет метод в родительском классе с тем же именем, используя те же аргументы. – kristenmills

+0

ничего себе. благодаря! я тоже не знал этого :) – s12chung

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