[Ruby]includeとextendの違い・使い方をまとめてみた

はじめに

Rubyには多重継承(同じメソッドを違うクラスで使ったりする)という概念が存在しない。

そのかわり、同じような機能を持つ、mixin(ミックスイン)と呼ばれるものが用意されている。

mixinは、モジュールの機能を一つのクラスに取り込むことができ、そこで使われるのが、includeextend、(pretend)である。

違い

それぞれ違いとして、取り込んだモジュールに定義されたメソッドを、どのように呼び出すかという点に違いがある。

include、(pretend)インスタンスメソッドとして、extendクラスメソッドとして呼び出すことになる。

include

module M
  def lotte
    'Chiba Lotte'
  end
end

class Baseball
  include M
end

 Baseballクラスのインスタンスメソッドとして, M の lotteメソッドを呼び出せるようになった。

Baseball.new.lotte #=> "Chiba Lotte"

extend

module M
  def lotte
    'Chiba Lotte'
  end
end

class Baseball
  extend M
end

 Baseballクラスのクラスメソッドとして, M の lotteメソッドを呼び出せるようになった。

Baseball.lotte #=> "Chiba Lotte"
タイトルとURLをコピーしました