ProcとLambdaの違い 質問する

ProcとLambdaの違い 質問する

Proc.newRuby には、 and lambda(または1.9 の演算子)を介して作成された Proc 間に違いがあります->()。非ラムダ Proc はブロック引数に渡された配列をスプラットしますが、ラムダを介して作成された Proc はそうしません。

p = Proc.new { |a,b| a + b}
p[[1,2]] # => 3

l = lambda { |a,b| a + b }
l[[1,2]] # => ArgumentError: wrong number of arguments (1 for 2)

この行動の背後にある動機について何か知見をお持ちの方はいらっしゃいますか?

ベストアンサー1

ラムダと非ラムダの間には主に 2 つの違いがありますProc

  1. メソッドと同様に、ラムダは自身から戻りますが、非ラムダProcはブロックと同様に、囲んでいるメソッドから戻ります。
  2. メソッドと同様に、ラムダには厳密な引数チェックがありますが、非ラムダProcにはブロックと同様に緩い引数チェックがあります。

または、簡単に言うと、ラムダはメソッドのように動作し、非ラムダProcはブロックのように動作します。

ここで見ているのは、#2 のインスタンスです。ブロックとメソッド、さらに非ラムダProcとラムダで試してみると、わかります。(この動作がなければHash#each本物使用するのは面倒です。する2 つの要素を持つ配列を生成しますが、ほとんどの場合、2 つの引数として扱う必要があります。

おすすめ記事