我知道圆括号之间的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条?
主要是:当它没有争论时,它有什么不同之处?
发布于 2014-04-09 19:33:49
如果你把他们排除在外会发生什么?
然后,在第一遍中,x,y将被设置为集合中的前2个值。从下一次开始,x将被设置为块返回的值,而y将被设置为集合中的下一个元素。
在您的示例中,x和y分别设置为2和4。
从下一次开始,x被设置为nil,因为块中的最后一条语句是Kernel#puts,它在打印传递给它的参数后返回nil。但y是6,然后是8。
#inject
如果没有为备注显式指定初始值,则集合的first元素将用作备忘录的初始值。
所有这一切都是非常期待的,根据代码。
现在假设将初始值传递为- 11,则输出为:-
x: 11 y: 2
x: y: 4
x: y: 6
x: y: 8这里的解释是一样的-
在这种情况下,在第一遍中,x和y分别设置为11和2。
从下一次开始,x被设置为nil,因为块中的最后一条语句是Kernel#puts,它在打印传递给它的参数后返回nil。但是y是4,然后是6,然后是8。
注意:在x:之后,当你什么也看不见的时候。为什么?因为nil.to_s是空字符串,即""。
https://stackoverflow.com/questions/22972271
复制相似问题