Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Procクラス > new
new -> Proc[permalink][rdoc]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 と同じです。