gpt4 book ai didi

ruby - inject() 在没有参数的情况下做什么

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

我知道括号之间的 inject() 参数是可选的,那么当您将它们省略时会发生什么?例如:

    [2, 4, 6, 8].inject{ |x, y|
puts "x: #{x} y: #{y}"
}

输出如下:

x: 2   y: 4 
x: y: 6
x: y: 8

为什么 x 从 2 开始?它不应该从零开始吗?为什么只有 3 行输出而不是 4 行?

主要是:当它没有参数时,它有什么不同?

最佳答案

so what happens when you leave them out?

然后在第一遍中,xy 将被设置为您集合中的前 2 个值。从下一次开始,x 将被设置为 block 返回的值,y 将被集合中的下一个元素设置。

在您的例子中,第一遍 xy 分别设置为 24

从下一轮开始,x 被设置为 nil,因为您 block 中的最后一条语句是 Kernel#puts,它返回 nil 在打印您传递给它的参数之后。但是 y6,然后是 8

#inject

If you do not explicitly specify an initial value for memo, then the first element of collection is used as the initial value of memo.

根据代码,一切都非常符合预期。


现在假设,您将初始值传递为 - 11,那么输出将是:-

x: 11   y: 2
x: y: 4
x: y: 6
x: y: 8

这里的解释是一样的-

在这种情况下,第一遍 xy 分别设置为 112

从下一轮开始,x 被设置为 nil,因为您 block 中的最后一条语句是 Kernel#puts,它返回 nil 在打印您传递给它的参数之后。但是 y4,然后是 6,然后是 8

注意: x: 之后,当您什么都看不到时。为什么 ?因为 nil.to_s 是空字符串,即 ""

关于ruby - inject() 在没有参数的情况下做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972271/

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