Module#prependとは
Ruby2.0から追加された新機能のひとつに、Module#prepend
があります。これはモジュールの機能を組み込む(Mix-inする)ときに使われるinclude、extendに続く3個目の方法であり、その特徴を簡潔に言うと
Module#include に似た、Module#prepend という機能が追加されました。Module#include と異なり、prepend するクラス (モジュール) よりもメソッド探索順序を前にもってくる仕組みになります。
というものです。
Moduleの使い方
Module#prepend
の機能を説明する前に、まずRubyのモジュールについて簡単に復習したいと思います。
Rubyのモジュールはクラスに似た機能ですが、インスタンスを生成することができません。また、クラスのように継承させることもできません。
それでは何に使われるかというと、名前空間を区切ったり、機能を切り出して「つまみ食い」的にいろいろな場所へ取り込めるようにしたり、です。そして「取り込む」ときに使われるメソッドが先にも名前を出したincludeとextend、定義クラスまで明示するとModule#include
とObject#extend
です。
ただ、extendは特異クラスにモジュールの機能を組み込むメソッドであり少々prependとは毛色が違うため今回は脇においておき、次のページでは「includeとprependの比較」という形で挙動を見ていこうと思います。