尝试一个关于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方法时似乎有什么问题?
答案 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永远不会成为第一个数字。