gpt4 book ai didi

ruby - 为什么 ruby​​ 的 inject 不能正确求和?

转载 作者:数据小太阳 更新时间:2023-10-29 08:23:22 24 4
gpt4 key购买 nike

我没有从整数中的以下猴子修补方法得到正确的结果:

def harm
1 + (2..self).inject{|sum, x| sum + 1/x.to_r}
end

2.harm #=> 3

它应该返回 3/2,我的错误在哪里?

最佳答案

这里有两个问题:

  1. 当您遍历一个闭合范围时,例如 2..2,实际上什么也没有发生:

    (0..0).inject(){|s, x| s+= 99 }
    # => 0

    这就是您得到 3 的原因,因为 1 + 23

  2. 如果您没有将参数传递给 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com