names=new
visibility=public
kind=defined

--- new -> Proc
--- new { ... } -> Proc

ブロックをコンテキストとともにオブジェクト化して返します。

ブロックを指定しなければ、このメソッドを呼び出したメソッドが
ブロックを伴うときに、それを Proc オブジェクトとして生成して返します。

  def foo
    pr = Proc.new
    pr.call(1)
  end
  foo {|arg| p arg }
  # => 1

これは以下と同じです。

  def foo
    yield(1)
  end
  foo {|arg| p arg }
  # => 1

呼び出し元のメソッドがブロックを伴わなければ、例外
[[c:ArgumentError]] が発生します。

  def foo
    Proc.new
  end
  foo
  # => -:2:in `new': tried to create Proc object without a block (ArgumentError)
          from -:2:in `foo'
          from -:4

Proc.new は、Proc#initialize が定義されていれば
オブジェクトの初期化のためにこれを呼び出します。このことを
除けば、[[m:Kernel.#proc]] と同じです。

