Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > class UnboundMethod > bind
bind(obj) -> Methodself を obj にバインドした Method オブジェクトを生成し返します。
# クラスのインスタンスメソッドの UnboundMethod の場合
class Foo
def foo
"foo"
end
end
# UnboundMethod `m' を生成
p m = Foo.instance_method(:foo) # => #<UnboundMethod: Foo(Foo)#foo>
# Foo のインスタンスをレシーバとする Method オブジェクトを生成
p m.bind(Foo.new) # => #<Method: Foo(Foo)#foo>
# Foo のサブクラス Bar のインスタンスをレシーバとする Method
#@# ruby 1.8 feature: 許されるようになりました
class Bar < Foo
end
# p m.bind(Bar.new) # => -18:in `bind': bind argument must be an instance of Foo (TypeError)
# 同名の特異メソッドが定義されているとダメ
class << obj = Foo.new
def foo
end
end
p m.bind(obj) # => -:25:in `bind': method `foo' overridden (TypeError)
# モジュールのインスタンスメソッドの UnboundMethod の場合
module Foo
def foo
"foo"
end
end
# UnboundMethod `m' を生成
p m = Foo.instance_method(:foo) # => #<UnboundMethod: Foo(Foo)#foo>
# Foo をインクルードしたクラス Bar のインスタンスをレシーバと
# する Method オブジェクトを生成
class Bar
include Foo
end
p m.bind(Bar.new) # => #<Method: Bar(Foo)#foo>
# Bar のサブクラスは Foo をインクルードしているのと同等なのでよい
class Baz <Bar
end
p m.bind(Baz.new) # => #<Method: Baz(Foo)#foo>
# 同名の特異メソッドが定義されているとダメ
class << obj = Baz.new
def foo
end
end
p m.bind(obj) # => -:27:in `bind': method `foo' overridden (TypeError)