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