names=define_method
visibility=private 
kind=defined

--- define_method(name, method) -> Proc | Method | UnboundMethod
--- define_method(name) { ... } -> Proc

インスタンスメソッド name を定義します。

ブロックを与えた場合、定義したメソッドの実行時にブロックが
レシーバクラスのインスタンスの上で [[m:BasicObject#instance_eval]] されます。

@param name [[c:String]] または [[c:Symbol]] を指定します。

@param method [[c:Proc]]、[[c:Method]] あるいは [[c:UnboundMethod]] の
       いずれかのインスタンスを指定します。

@return 引数 method を与えたときはそれを、ブロック付きで
        呼びだしたときはブロックを [[c:Proc]] 化したオブジェクトを、
        それぞれ返します。

@raise TypeError method に同じクラス、サブクラス以外のメソッドを指定し
                 た場合に発生します。

  class Foo
    def foo() p :foo end
    define_method(:bar, instance_method(:foo))
  end
  Foo.new.bar    # => :foo

