在检查注入方法的工作时,我写下了简单的代码来打印可以被3整除的数字计数,但不知何故发生了故障:
{{1}}
这是次要的,但我没有抓住它。
答案 0 :(得分:3)
使用inject
,您需要在每次迭代时返回memo-element:
[1, 2, 3, 4].inject(0) do |count, value|
if value % 3 == 0
count = count + 1
end
count
end
#=> 1
或者,如果您更喜欢单行版本:
[1, 2, 3, 4].inject(0) { |c, v| c += 1 if v % 3 == 0; c }
#=> 1
值得注意的是。在某些情况下,您可以将inject
替换为each_with_object
,并避免必须返回memo对象,但由于后者的返回值是传入的原始对象,因此它仅适用于传递的对象参考(即不是Fixnum
s。)
[1, 2, 3, 4].each_with_object(0) { |v, c| c += 1 if v % 3 == 0 }
#=> 0
答案 1 :(得分:1)
事实证明它实际上是次要的。我没有在每个循环结束时返回计数,所以在第一次迭代后计数为零,因为我没有返回它。失误!
[1,2,3,4].inject(0) do |count,value|
if value % 3 == 0
count = count + 1
end
count
end