読者です 読者をやめる 読者になる 読者になる

Moduleによるクラスの拡張

Ruby/Rails
Module CoolModule
  # このModuleをインクルードしたクラスを引数にブロック内を実行
  def self.included(class)
    # 第1引数のメソッドを第2引数以降を引数に実行
    class.send :alias_method_chain, :hoge_method, :cool
  end

  # インクルードしたクラス内で定義(≠実行)
  def hoge_method_with_cool
    # ...
  end
end

 クラスがモジュールをインクルードすると、モジュールに定義されたメソッドをクラスでも使えるようになる(クラス内に定義される)。一方、インクルードされたときにメソッドを実行したい場合(alias_method_chain、define_method、class_eval等)、Module#includedを使う。