2013-08-22 8 views
12

Gibt es eine Elternklasse gibt es eine Möglichkeit, Code für jede Unterklasse beim Laden einzufügen? dh.Ruby: Ausführen von Code für jede Unterklasse

Gegeben: ParentClass, wie füge ich Code wie folgt:

class ChildClass < ParentClass 
    execute_function 

    ... 
end 

für alle untergeordneten Klassen von ParentClass?

+0

Was passiert, wenn diese Klassen sind bereits geladen? Was sollte dieser Code tun? –

+0

@SergioTulentsev Err, wie kann eine Klasse geladen werden, wenn ihr Elternteil nicht geladen ist? – meagar

+0

@meagar: Es ist spät in der Nacht und ich frage dumme Fragen :) –

Antwort

13

In der ParentClass überschreiben die geerbte Methode

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

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

+0

wow ... verbrachte so viel Zeit auf der Suche nach diesem. wäre es richtig, 'super (subclass)' für die Sicherheit zu benutzen? – s12chung

+2

Sie könnten, aber es ist nicht erforderlich. 'super' ohne Argumente wird die Methode in der Elternklasse mit demselben Namen unter Verwendung der gleichen Argumente aufrufen. – kristenmills

+0

wow. Vielen Dank! das wusste ich auch nicht :) – s12chung