module M1; def m; "M1!"; end; end module M2; include M1; end # M2 の上に M1 module M3; include M2; end # M3 の上に M2 module M4; include M3; end # M4 の上に M3 class C; include M4; end # C の上に M4
p C.new.m p C.ancestors # 継承とインクルード込みの検索優先順位を表示
結果
"M1!" [C, M4, M3, M2, M1, Object, Kernel]
検索順位的には継承と同じなので実用上の問題はない
class C1; end class C2 < C1; end class C3 < C2; end p C3.ancestors #=> [C3, C2, C1, Object, Kernel]