Ruby勉強

インターネットの企画職な人がプログラミングを勉強するブログ

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