2013-08-22 10 views
12

Czy istnieje klasa nadrzędna, aby wstawić kod dla każdej podklasy podczas ładowania? to znaczy.Ruby: Kod egzaminu dla każdej podklasy

Dane: ParentClass, jak mogę wstawić kod tak:

class ChildClass < ParentClass 
    execute_function 

    ... 
end 

dla wszystkich klas potomnych ParentClass?

+0

Co jeśli te zajęcia są już załadowane? Co powinien zrobić ten kod? –

+0

@SergioTulentsev Err, w jaki sposób można załadować klasę, jeśli jej rodzic nie jest załadowany? – meagar

+0

@meagar: jest późna noc i zadaję głupie pytania :) –

Odpowiedz

13

W ParentClass przesłaniać odziedziczone metody

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

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

+0

wow ... spędził tyle czasu na szukanie tego. byłoby prawidłowe użycie 'super (podklasy)' dla poprawnego bezpieczeństwa? – s12chung

+2

Można, ale nie jest to wymagane. 'super' bez argumentów wywoła metodę w klasie nadrzędnej o tej samej nazwie, używając tych samych argumentów. – kristenmills

+0

wow. dzięki! Ja też tego nie znałem :) – s12chung