Instanzvariablen in Mixins initialisieren
Gibt es eine saubere Möglichkeit, Instanzvariablen in einem Modul zu initialisieren, das als Mixin verwendet werden soll? Zum Beispiel habe ich Folgendes:
module Example
def on(...)
@handlers ||= {}
# do something with @handlers
end
def all(...)
@all_handlers ||= []
# do something with @all_handlers
end
def unhandled(...)
@unhandled ||= []
# do something with unhandled
end
def do_something(..)
@handlers ||= {}
@unhandled ||= []
@all_handlers ||= []
# potentially do something with any of the 3 above
end
end
Beachten Sie, dass ich immer wieder prüfen muss, ob das jeweils geht@member
wurde in jeder Funktion richtig initialisiert - dies ist leicht irritierend. Ich würde viel lieber schreiben:
module Example
def initialize
@handlers = {}
@unhandled = []
@all_handlers = []
end
# or
@handlers = {}
@unhandled = []
# ...
end
Und nicht immer wieder sicherstellen müssen, dass die Dinge richtig initialisiert werden. Soweit ich das beurteilen kann, ist dies jedoch nicht möglich. Gibt es einen Ausweg, abgesehen vom Hinzufügen einesinitialize_me
Methode zuExample
und anrufeninitialize_me
aus der erweiterten Klasse? Ich habe gesehendieses Beispiel, aber ich bin auf keinen Fall ein AffeClass
nur um dies zu erreichen.