--- bind(obj)

    self  obj ˥Хɤ bound method ֥
    (Ĥޤ Method ֥) ֤ޤХ
    ɤǤΤϡunbind ֥ȤΥ饹Υ󥹥󥹤
    åΥ⥸塼򥤥󥯥롼ɤ饹Υ󥹥󥹤
    ǤǤʤ㳰 TypeError ȯޤ

    :

        # 饹Υ󥹥󥹥᥽åɤ 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)

