kind=defined
names=include
visibility=private 

--- include(*mod) -> self

モジュール mod をインクルードします。

@param mod [[c:Module]] のインスタンス( [[c:Enumerable]] など)を指定します。

@raise 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]

モジュールの機能追加は、クラスの継承関係の間にそのモジュールが挿入
されることで実現されています。従って、メソッドの探索などは
スーパークラスよりもインクルードされたモジュールのほうが
先に行われます
(上の例の [[m: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]

引数に複数のモジュールを指定した場合、
最後の引数から順にインクルードします。

