概要
Module#prepend
詳細
Module#prependはクラスの手前にモジュールを追加します。
モジュールの機能を追加するという点についてはincludeと似ています。
includeはクラスに対して機能を追加する。
prependはクラスの既存機能を変更する。
という使い分けが一般的なようです。
tbpgr_utils gemのKernel#aa_ancestorsメソッドで
includeとprependの継承階層の違いを確認してみます。
サンプルコード(include)
# encoding: utf-8 require 'tbpgr_utils' class Hoge def hoge "hoge" end end module Higeable def hoge "hige" + super end end class Hoge include Higeable end puts Hoge.new.hoge
出力(include)
hoge ------------- |BasicObject| ------------- | ------------- | Kernel | ------------- | ------------- | Object | ------------- | ------------- | Higeable | ------------- | ------------- | Hoge | -------------
サンプルコード(prepend)
# encoding: utf-8 require 'tbpgr_utils' class Hoge def hoge "hoge" end end module Higeable def hoge "hige" + super end end class Hoge prepend Higeable end puts Hoge.new.hoge
出力(prepend)
higehoge ------------- |BasicObject| ------------- | ------------- | Kernel | ------------- | ------------- | Object | ------------- | ------------- | Hoge | ------------- | ------------- | Higeable | -------------