在 irb 中,为了检查注入(inject)方法的工作,我写下了简单的代码来打印可被 3 整除的数字的计数,但不知何故出现了故障:
[1,2,3,4].inject(0) do |count,value|
if value % 3 == 0
count = count + 1
end
end
这是一件小事,但我没有捕获它。
最佳答案
与 inject
,您需要在每次迭代时返回备忘录元素:
[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
关于Ruby 的动态注入(inject)方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34171600/