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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage