手続きオブジェクトとは 手続きを中断して値を返す orphan な手続きオブジェクトの挙動 Proc オブジェクトをブロック付きメソッド呼び出しに使う lambda と proc と Proc.new とイテレータの違い 手続きオブジェクトとは 手続きオブジェクトとはブロックをコンテキスト(ローカル変数のスコープやスタックフレーム)と ともにオブジェクトしたものです。Proc クラスのインスタンスとして実現されています。 ブロック内では、新たなスコープが導入されるとともに、外側のローカル変数を参照できます。 Proc オブジェクトがローカル変数のスコープを保持していることは以下の例で変数 var を 参照できていることからわかります。 例: var = 1 $foo = Proc.new { var } var = 2 def foo $foo.call end p foo # => 2