Ruby注入方法奇怪的输出

时间:2016-03-10 16:03:49

标签: ruby

尝试一个关于ruby的简单教程。在IRB中,当我键入以下代码

(1..10).inject{|memo,n| memo + n} 
=>55 (correct calculation)

但是,当我键入以下内容时:

(1..10).inject{|memo,n| memo + n*2} 
=>109 (which should be 110)

计算错误。 Ruby执行inject方法时似乎有什么问题?

2 个答案:

答案 0 :(得分:2)

当没有明确指定时,它会将第一个可枚举元素传递给memo,而不是依赖于ruby魔法,我总是会使用显式备忘录初始化:

#             ⇓⇓⇓ initial memo value
(1..10).inject(0) { |memo,n| memo + n*2 } 
#⇒ 110

答案 1 :(得分:1)

这是因为它第一次将1分配给备忘录,2分配给n:

|memo, n| => memo = 1, n = 2

所以,当你第一次做简单的添加时,它会是1 + 2 = 3,然后n会经过其余的数字。因此,n永远不会成为第一个数字。