Инициализация переменных экземпляра в Mixins

Есть ли чистый способ инициализации переменных экземпляра в модуле, предназначенном для использования в качестве Mixin? Например, у меня есть следующее:

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

Обратите внимание, что я должен проверять снова и снова, если каждый@member правильно инициализирован в каждой функции - это слегка раздражает. Я бы предпочел написать:

module Example

  def initialize
    @handlers     = {}
    @unhandled    = []
    @all_handlers = []
  end

  # or
  @handlers  = {}
  @unhandled = []
  # ...
end

И не нужно многократно проверять правильность инициализации. Однако из того, что я могу сказать, это невозможно. Есть ли способ обойти это, кроме добавленияinitialize_me метод дляExample и звонитinitialize_me из расширенного класса? Я виделэтот пример, но там'я ни за чтом обезьяна исправления вещи вClass просто чтобы сделать это.

Ответы на вопрос(4)

Ваш ответ на вопрос