mixin、ミキシン。
mixin、よく耳にしてはいたけど、何をするか全然わかっていなかったのでお勉強。そして読み方も。ミックスインって読んでたけど、Google多数決で確認したところ、ミキシンが圧倒的に多かったのでこれからはミキシンって読む。
module Hoge def puts_hoge puts "hoge" end class Poyo def puts_poyo puts "poyo" end end end module Piyo def puts_piyo puts "piyo" end end class Huga include Hoge include Piyo def puts_poyo poyo = Poyo.new poyo.puts_poyo end end huga = Huga.new huga.puts_hoge huga.puts_piyo huga.puts_poyo
結果。
hoge piyo poyo
何となくわかった。モジュール内のメソッドをクラスの中に取り込むことが出来るのだ。そしてそれは複数のモジュールを取り込むことが可能。
もし複数のモジュール間で同名のメソッドがある場合はどうなるのか?
Piyoクラスをこんな風に書き換えた。
module Piyo def puts_hoge puts "piyo" end end
そして実行。
huga = Huga.new huga.puts_hoge
結果。
piyo
エラーにならない。どういう順番でputs_hogeが呼ばれているのか。includeした順で最も新しいのが呼ばれるのか。
それではHogeクラスでのincludeする順番を変えてみよう。
include Piyo include Hoge
実行結果。
piyo
あれれれ〜変わらないや。
それじゃ、モジュールが定義されている順番?
PiyoクラスをHogeクラスの上に移動させて実行。
hoge
いえすっ!
最も新しく定義されているものが呼び出させるようだ。