モジュールMix-inのルール
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
クラス名は、ArrayやStringと名詞であるのに対し、ComparableやEnumerableなどモジュール名は形容詞が付いています。
モジュールは、クラスに共通するような機能を追加するために使われるというイメージです。
また、モジュールは、実際にはクラスの継承と同じように振舞います。
スポンサーリンク
module M1 def method puts "モジュールM1のメソッド" end end module M2 def method puts "モジュールM2のメソッド" end end module M3 include M2 end class C def method puts "クラスCのメソッド" end include M1 include M2 end class D include M1 include M2 end class E include M3 include M1 end p C.ancestors # 単純継承のような動作 C.new.method # 同名のメソッドはクラスのものが優先 D.new.method # 後からインクルードしたモジュールのメソッドが優先 p E.ancestors # 入れ子のモジュールも単純継承のような動作
実行結果。
[C, M2, M1, Object, Kernel] クラスCのメソッド モジュールM2のメソッド [E, M1, M3, M2, Object, Kernel]
「C, M, Object, Kernel」とモジュール(M)がクラス(C)のancestorsに含まれていることを確認できます。
また、クラス内とモジュール内に同名のメソッドが含まれている場合は、クラスのメソッドが優先されます。
複数のモジュールをインクルードして同名のメソッドが含まれる場合は、後からインクルードされたモジュールのメソッドが優先されます。
また、モジュールが入れ子になっている場合も、単純継承のように振舞います。
スポンサーリンク
<< 前の記事 : Mix-inのサンプル
- - 関連記事 -
- Mix-inのサンプル
スポンサーリンク