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を見ましたが、これを達成するためだけにモンキーパッチを適用する方法はありません。