はじめに
Rubyには多重継承(同じメソッドを違うクラスで使ったりする)という概念が存在しない。
そのかわり、同じような機能を持つ、mixin(ミックスイン)と呼ばれるものが用意されている。
mixinは、モジュールの機能を一つのクラスに取り込むことができ、そこで使われるのが、include、extend、(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"