lambdaとProcは動作が微妙に異なる
これは知らないと意外とハマるかも。
実行環境はこんな感じ。
$ ruby -v ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]
以下のプログラムを実行する。
def hoge lam = lambda{return 3} prc = Proc.new{return 4} p lam.call p "lambda called" p prc.call p "prc called" end p hoge p "hoge called"
以下のような動作になる。
"3" "lambda called" "4" "hoge called"
つまり「p "proc called"」の行が呼ばれない。
lambdaから制御が戻ると特定の値を返す。
しかしprocから制御が戻ると、呼び出し元のメソッド(ここではhoge)から制御を戻そうとする。
それが不可能である場合にはLocalJumpErrorになるらしい。
つまり、Procの方はp.callからhogeの制御を戻すので「p "proc called"」が呼ばれない。
ちなみに普段はSchemeの影響でlambdaを使ってる。
しかし何故こんな仕様が…。