lambdaとproc

lambdaとprocはいずれもProc.newの同義語です。

p lambda {}     #=> #<Proc:0x00000000@a.rb:1>
p proc {}       #=> #<Proc:0x00000000@a.rb:2>
p Proc.new {}   #=> #<Proc:0x00000000@a.rb:3>

追記:あ、ささださんからツッコミが。確かに"except the resulting Proc objects check the number of parameters passed when called."というのを見逃していました。多謝♪
せっかくなので、Proc.newでは引数の数チェックしないのを確かめましょう。

a1 = Proc.new {|a, b| a + b}
a2 = lambda {|a, b| a + b}

p a1.call(1, 2)
p a2.call(1, 2)

p a1.call(1, 2, 3)
p a2.call(1, 2, 3)

実行結果です。

3
3
3
a.rb:2: wrong number of arguments (3 for 2) (ArgumentError)
        from a.rb:8