我没有从整数中的以下猴子修补方法得到正确的结果:
def harm
1 + (2..self).inject{|sum, x| sum + 1/x.to_r}
end
2.harm #=> 3
它应该返回 3/2,我的错误在哪里?
最佳答案
这里有两个问题:
当您遍历一个闭合范围时,例如
2..2
,实际上什么也没有发生:(0..0).inject(){|s, x| s+= 99 } # => 0
这就是您得到
3
的原因,因为1 + 2
是3
。如果您没有将参数传递给
inject
,它会使用您传递给迭代器的第一个值作为开始备忘录,即2
:(2..2).inject(){|s, x| s+= 99 } #=> 2
输入 0 会得到一个实际的迭代:
(2..2).inject(0){|s, x| s+= 99 } #=> 99
所以在你的方法中试试这个:
1 + (2..self).inject(0){|sum, x| sum + 1/x.to_r}
独立的:
1 + (2..2).inject(0){|sum, x| sum + 1/x.to_r}
#=> 3/2
关于ruby - 为什么 ruby 的 inject 不能正确求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19346041/