モジュール発展レベル
Ruby の Module#prepend と Module#include の主な違いはどれですか?
- 1prepend はモジュールをクラスより前のメソッド探索順に挿入する
- 2prepend はクラスメソッドとして追加する
- 3両者に違いはない
- 4prepend は継承チェーンを変更しない
解説
prepend はモジュールをクラス自身よりも前のメソッド探索順(MRO)に挿入します。これによりモジュール内で super を呼ぶと元のクラスのメソッドが呼ばれます。メソッドのラッピング(around advice)に使われます。