Proc
Procオブジェクトは、ブロックをオブジェクト化したもの。 Proc.new{|x| puts x}のように、Proc.newにブロックを渡すことで、そのブロックをコンテキストと一緒にオブジェクト化する。
Proc.newにブロックを渡さない場合、そのProc.newを呼び出したメソッドに渡されたブロックを引数に取る。
呼び出したメソッドにもブロックが渡されていなかった場合はArgumentErrorになる。
インスタンスメソッドのbindingは、Procオブジェクトが保持するコンテキストをBindingオブジェクトで返す。 ブロックが渡されることを期待するメソッドに対して、Procオブジェクトを先頭に&をつけて引数として渡すと、ブロックを渡したことになる。 code:ex.rb
prc = Proc.new {|x| puts x }
ただしこの際のProcオブジェクトは装飾のないProcオブジェクトとして振る舞うため、通常のブロック付き呼び出しやlambdaによって生成されるProcオブジェクトと同じ挙動にならない。