Ruby勉強

インターネットの企画職な人がプログラミングを勉強するブログ

Rubyモジュール_prepend - Silver/Gold試験対策

prepend と includeの違い

# prependで読み込まれたモジュールメソッドのほうが先に呼び出される
module IncludeModule
  def embeded_method
    :from_include_module
  end
end

module PrependModule
  def embeded_method
    :from_prepend_module
  end
end

class PrependedClass
  prepend PrependModule
  include IncludeModule
end

embeded_obj = PrependedClass.new
p embeded_obj.embeded_method #=> :from_prepend_module

includeと同じく、二つ目のprependが呼び出される

module FirstPrepend
  def hoge
    :from_first
  end
end
module SecondPrepend
  def hoge
    :from_second
  end
end
class Hoge
  prepend FirstPrepend
  prepend SecondPrepend
end
p Hoge.new.hoge #=> :from_second

prependはモジュールとクラスに同名のメソッドがあった場合、 モジュール側のメソッドが優先して呼ばれる

module M
  def hello
    :from_m
  end
end
class C1
  include M
  def hello
    :from_c1
  end
end
class C2
  prepend M
  def hello
    :from_c2
  end
end
p C1.new.hello #=> from_c1
p C2.new.hello #=> from_m