kind=defined
names=extend
visibility=public

--- extend(*modules) -> self

引数で指定したモジュールのインスタンスメソッドを self の特異
メソッドとして追加します。

[[m:Module#include]] は、クラス(のインスタンス)に機能を追加します
が、extend は、ある特定のオブジェクトだけにモジュールの機能を追加
したいときに使用します。

引数に複数のモジュールを指定した場合、最後
の引数から逆順に extend を行います。

@param modules モジュールを任意個指定します（クラスは不可）。
@return self を返します。

  module Foo
    def a
      'ok Foo'
    end
  end
  
  module Bar
    def b
      'ok Bar'
    end
  end
  
  obj = Object.new
  obj.extend Foo, Bar
  p obj.a #=> "ok Foo"
  p obj.b #=> "ok Bar"
  
  class Klass
    include Foo
    extend Bar
  end
  
  p Klass.new.a #=> "ok Foo"
  p Klass.b     #=> "ok Bar"
  
extend の機能は、「特異クラスに対する [[m:Module#include]]」
と言い替えることもできます。
ただしその場合、フック用のメソッド
が [[m:Module#extended]] ではなく [[m:Module#included]] になるという違いがあります。

  # obj.extend Foo, Bar とほぼ同じ
  class << obj
    include Foo, Bar
  end

@see [[m:Module#extend_object]],[[m:Module#include]],[[m:Module#extended]]

