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}

whereObject#foo将被定义为

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

在某些类似于此的库中是否有现成的方法foo

4

0 回答 0