Ruby Proc/lambda
Procとlambdaで break時、return、retry時の挙動が異なる。
l1 = lambda {return 10} l2 = lambda {break 20} p l1.call #=> 10 p l2.call #=> 20 p1 = Proc.new {return 10} p2 = Proc.new {break 20} p p1.call #=> unexpected return (LocalJumpError) p p2.call #=> break from proc-closure (LocalJumpError)
Procは、上記の場合、もう作成元、つまりこのばあいmainが終了しているのでエラー
Procは引数の数に違いがあってもnilを付けてブロックを実行
p = Proc.new{|a,b,c| a+b+c} p.call(1,2,3,4) #=> 6 p.call(1,2) #=> TypeError: nil can't be coerced into Fixnum
lambdaは引数エラーが出る
p = lambda{|a,b,c| a+b+c} p.call(1,2,3,4) #=> ArgumentError: wrong number of arguments