module上級

Ruby の `Module#prepend` と `Module#include` の主な違いはどれですか?

  • prepend はモジュールをクラスより前のメソッド探索順に挿入する
  • prepend はクラスメソッドとして追加する
  • 両者に違いはない
  • prepend は継承チェーンを変更しない

解説

`prepend` はモジュールをクラス自身よりも前のメソッド探索順(MRO)に挿入します。これによりモジュール内で `super` を呼ぶと元のクラスのメソッドが呼ばれます。メソッドのラッピング(around advice)に使われます。