Mixinとして使用するモジュールでインスタンス変数を初期化するためのクリーンな方法はありますか? - これは軽度に刺激する私は、各@member
が適切に各関数内で初期化されている場合、何度も何度も確認する必要があり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
お知らせ:たとえば、私は次のよう持っています。
module Example
def initialize
@handlers = {}
@unhandled = []
@all_handlers = []
end
# or
@handlers = {}
@unhandled = []
# ...
end
を繰り返してください物事を正しく初期化されていることを確認する必要はありません:私はむしろ書くでしょう。しかし、私が言うことから、これは不可能です。 initialize_me
メソッドをExample
に追加し、拡張クラスからinitialize_me
を呼び出す以外に、これを回避する方法はありますか?私はthis exampleを見ましたが、これを達成するために私が猿のパッチを当てているのはClass
にはありません。
優秀、ありがとう - 何百万もの記事があるにもかかわらず、このアプローチがどこにも記載されていないのはなぜかと思います。 –
残念ながら、これはうまくいかないようです - '@ example_ivar'を参照すると、' nil'として戻ってきます。 –
ああ、ありがとう - しかし、クラスがすでに 'initialize'メソッドを指定している場合、これは問題を引き起こします。 –