Ruby注入方法奇怪的输出
尝试一个关于ruby的简单教程。在IRB中,当我键入以下代码时Ruby注入方法奇怪的输出,ruby,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方法时出现了什么问题?这是因为它第一次将1分配给memo,将2分配给n: |memo, n| =&g
(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方法时出现了什么问题?这是因为它第一次将1分配给memo,将2分配给n:
|memo, n| => memo = 1, n = 2
所以,当你们第一次做简单的加法时,它将是1+2=3,然后n通过其余的数字。因此,n永远不会成为第一个数字。这是因为它第一次将1分配给memo,将2分配给n:
|memo, n| => memo = 1, n = 2
所以,当你们第一次做简单的加法时,它将是1+2=3,然后n通过其余的数字。因此,n永远不会成为第一个数字。不依赖ruby magic,ruby magic会将第一个可枚举元素传递给
memo
,如果它没有明确指定,我将始终使用显式memo初始化:
# ⇓⇓⇓ initial memo value
(1..10).inject(0) { |memo,n| memo + n*2 }
#⇒ 110
不依赖ruby magic,即在未显式指定时将第一个可枚举元素传递给
memo
,我将始终使用显式memo初始化:
# ⇓⇓⇓ initial memo value
(1..10).inject(0) { |memo,n| memo + n*2 }
#⇒ 110
这没有错。你在什么意义上声称这是错误的?这个问题不清楚。@sawa我认为它错了,因为在第一个代码中,它是这样做的:memo=0 memo+=1 memo+=2。备忘录+=10。对于第二个代码,所有值都应该是2的倍数。这没有错。你在什么意义上声称这是错误的?这个问题不清楚。@sawa我认为它错了,因为在第一个代码中,它是这样做的:memo=0 memo+=1 memo+=2。备忘录+=10。对于第二个代码,所有的值都应该是2的倍数。我不知道memo会取范围第一项的值。我以为会从一个空容器开始,“空”很难预测。考虑<代码>注销& +< /COD>和<代码>注销:*<代码>。此外,
0
是最佳候选。对于乘法,1
是。我不知道memo会取范围第一项的值。我以为会从一个空容器开始,“空”很难预测。考虑<代码>注销& +< /COD>和<代码>注销:*<代码>。此外,0
是最佳候选。对于乘法,1
为。