Rubyリファレンス: Home

extend (Object)

Edit   History

標準クラス・モジュール > Object > extend

obj.extend(module, ...)

extendメソッドは、オブジェクトの特異クラスにモジュールを取り込み、モジュールのメソッドを特異メソッドとして使えるようにします。取り込むモジュールは引数moduleに指定します(複数指定できます)。戻り値はレシーバ自身です。

次の例は、文字列オブジェクトstrでモジュールDoubleのメソッドdoubleが使えるようにします。

module Double
  def double
    self + self
  end
end
 
str = "hello"
str.extend(Double)
puts str.double
hellohello

上記の「str.extend(Double)」は、次のように特異クラスでincludeメソッドを使ってモジュールをミックスインするのと同じ結果になります。

class << str
  include Double
end

クラス(Classオブジェクト)に対してextendメソッドを呼び出すと、モジュールのメソッドをクラスメソッド(クラスの特異メソッド)として呼び出せるようになります。

module Finder
  def find(name)
    "#{name} found!"
  end
end
 
class Cat
  extend Finder
end
puts Cat.find("Tama")
Tama found!

詳細

extendメソッドの実装は、引数の各モジュールに対してextend_objectメソッドとextendedメソッドを呼び出すというものです。extendの機能の本体はextend_objectにあります。

関連項目