Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby注入方法奇怪的输出_Ruby - Fatal编程技术网

Ruby注入方法奇怪的输出

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

尝试一个关于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| => 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
为。