Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > UnboundMethodクラス > bind

instance method UnboundMethod#bind

bind(obj) -> Method[permalink][rdoc]

self を obj にバインドした Method オブジェクトを生成して返します。

NOTE: Ruby 1.8.xでモジュールのインスタンスメソッドをbindすると不審な挙動を するので避けるべきである。

[PARAM] obj:
自身をバインドしたいオブジェクトを指定します。ただしバインドできるのは、 生成元のクラスかそのサブクラスのインスタンスのみです。
[EXCEPTION] TypeError:
objがbindできないオブジェクトである場合に発生します
# クラスのインスタンスメソッドの UnboundMethod の場合
class Foo
  def foo
    "foo"
  end
end

# UnboundMethod `m' を生成
p m = Foo.instance_method(:foo) # => #<UnboundMethod: Foo#foo>

# Foo のインスタンスをレシーバとする Method オブジェクトを生成
p m.bind(Foo.new)               # => #<Method: Foo#foo>

# Foo のサブクラス Bar のインスタンスをレシーバとする Method
class Bar < Foo
end
p m.bind(Bar.new)               # => #<Method: Bar(Foo)#foo>


# モジュールのインスタンスメソッドの UnboundMethod の場合
module Foo
  def foo
    "foo"
  end
end

# UnboundMethod `m' を生成
p m = Foo.instance_method(:foo) # => #<UnboundMethod: Foo#foo>

# Foo をインクルードしたクラス Bar のインスタンスをレシーバと
# する Method オブジェクトを生成
class Bar
  include Foo
end
p m.bind(Bar.new)               # => #<Method: Bar(Foo)#foo>