superclass=Object
type=class
library=_builtin
extended=
included=

レシーバを持たないメソッドを表すクラスです。
呼び出すためにはレシーバにバインドする必要があります。

[[m:Module#instance_method]] や
[[m:Method#unbind]] により生成し、後で
[[m:UnboundMethod#bind]] によりレシーバを
割り当てた [[c:Method]] オブジェクトを作ることができます。

例: [[c:Method]] クラスの冒頭にある例を UnboundMethod で書くと以下のようになります。

  class Foo
    def foo() "foo" end
    def bar() "bar" end
    def baz() "baz" end
  end

  # 任意のキーとメソッドの関係をハッシュに保持しておく
  # レシーバの情報がここにはないことに注意
  methods = {1 => Foo.instance_method(:foo),
             2 => Foo.instance_method(:bar),
             3 => Foo.instance_method(:baz)}

  # キーを使って関連するメソッドを呼び出す
  # レシーバは任意(Foo クラスのインスタンスでなければならない)
  p methods[1].bind(Foo.new).call      # => "foo"
  p methods[2].bind(Foo.new).call      # => "bar"
  p methods[3].bind(Foo.new).call      # => "baz"

例: 以下はメソッドの再定義を UnboundMethod を使って行う方法です。普通は
[[unknown:クラス／メソッドの定義/alias]] や [[unknown:メソッド呼び出し/super]] を使います。

  class Foo
    def foo
      p :foo
      end
    @@orig_foo = instance_method :foo
    def foo
      p :bar
      @@orig_foo.bind(self).call
    end
  end

  Foo.new.foo

  => :bar
     :foo
