Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library _builtin > class Proc > new

singleton method 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 と同じです。