0

を使用する場合Enumerable#inject、ほとんどの場合、結果が の引数として表示される最初のオブジェクトと同じクラス (および多くの場合同じオブジェクト) になるようにしますinject。たとえば、次のように使用します。

[1, 2, 3, 4, 5]
.inject(5){|i, e| i += e}
# => 20

[3, 4, 5]
.inject(1 => 1, 2 => 1){|h, e| h[e] = h[e - 1] + h[e - 2]; h}
# => {1=>1, 2=>1, 3=>2, 4=>3, 5=>5}

この操作が初期値を取得し、それを最終的な出力に変更するという観点からは、初期値をレシーバーとして次のように記述する方が自然です。

5
.foo([1, 2, 3, 4, 5]){|i, e| i += e}
# => 20

{1 => 1, 2 => 1}
.foo([3, 4, 5]){|h, e| h[e] = h[e - 1] + h[e - 2]; h}
# => {1=>1, 2=>1, 3=>2, 4=>3, 5=>5}

どこでObject#foo次のように定義されますか

def foo enum, ≺ enum.inject(self, &pr) end

これに似たライブラリに既製のメソッドはありfooますか?

4

0 に答える 0