Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > class Proc > new
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
呼び出し元のメソッドがブロックを伴わなければ、例外 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 が定義されていれば オブジェクトの初期化のためにこれを呼び出します。このことを 除けば、Kernel.#proc と同じです。