我正在尝试创建一个以数组作为参数的新方法(例如my_inject)。这种新方法应该复制注入方法的相同功能。
Array.inject(1){| product,n |产品* n}
注射方法:
1.累加器从0开始
2。 my_inject遍历集合
3。对每个迭代执行计算
4。然后累加器重置为结果 计算
5。下一次迭代:while循环/递归
编辑 :这可能是一个解决方案
def my_inject(acc=0)
array.each { |i| acc = yield(acc, i)}
acc
end
end
答案 0 :(得分:1)
注入方法看起来像这样:
def my_inject(my_array, accumulator)
my_array.each do |item|
accumulator = yield accumulator, item
end
accumulator
end
此方法遍历数组,并且对于每个项目,它将当前累积值和项目本身传递给给定块。它接受返回值,并用它替换当前的累计值。
它返回数组的最后一个结果。
答案 1 :(得分:1)
如果要直接在数组上调用方法,请执行以下命令:
def my_inject(accumulator)
self.each do |item|
accumulator = yield accumulator, item
end
accumulator
end
答案 2 :(得分:0)
说完我在一个问题上说的话 - 重新定义方法只需打开一个类并定义一个与旧方法同名的方法:
class Array
def inject(value) # You should never redefine method so it changes its interface/API!
(64+value).chr
end
end
更新后的答案
你想要的是在枚举模块上定义sum方法:
module Enumerable
def sum
reduce(&:+)
end
end
如果您正在使用rails,则它已经内置,因此您只需运行(5..10).sum
即可。请注意,(5..10)
不是数组而是Range,因此在Array上定义sum将不起作用。然而,在Enumerable模块(定义{{1}}和reduce
方法)上定义它是有意义的,它包含在Array和Range中(也包含在Hash和其他几个类中)