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