include(*mod) -> self
[permalink][rdoc][edit]-
モジュール mod をインクルードします。
- [PARAM] mod:
- Module のインスタンス( Enumerable など)を指定します。
- [EXCEPTION] ArgumentError:
- 継承関係が循環してしまうような include を行った場合に発生します。
module M end module M2 include M end module M include M2 end
実行結果:
-:3:in `append_features': cyclic include detected (ArgumentError) from -:3:in `include' from -:3
インクルードとは、指定されたモジュールの定義 (メソッド、定数) を引き継ぐことです。インクルードは多重継承の代わりに用いられており、 mix-in とも呼びます。
class C include FileTest include Math end p C.ancestors # => [C, Math, FileTest, Object, Kernel]
モジュールの機能追加は、クラスの継承関係の間にそのモジュールが挿入されることで実現されています。従って、メソッドの探索などはスーパークラスよりもインクルードされたモジュールのほうが先に行われます (上の例の Module#ancestors の結果がメソッド探索の順序です)。
同じモジュールを二回以上 include すると二回目以降は無視されます。
module M end class C1 include M end class C2 < C1 include M # この include は無視される end p C2.ancestors # => [C2, C1, M, Object, Kernel]
引数に複数のモジュールを指定した場合、最後の引数から順にインクルードします。