首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带参数注入()做什么?

不带参数注入()做什么?
EN

Stack Overflow用户
提问于 2014-04-09 19:32:05
回答 1查看 96关注 0票数 2

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

代码语言:javascript
复制
    [2, 4, 6, 8].inject{ |x, y|
      puts "x: #{x}   y: #{y}"
    }

产出如下:

代码语言:javascript
复制
x: 2   y: 4 
x:     y: 6
x:     y: 8

为什么x从2开始?不是应该从零开始吗?为什么只有3条生产线而不是4条?

主要是:当它没有争论时,它有什么不同之处?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-09 19:33:49

如果你把他们排除在外会发生什么?

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

在您的示例中,xy分别设置为24

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

#inject

如果没有为备注显式指定初始值,则集合的first元素将用作备忘录初始值。

所有这一切都是非常期待的,根据代码。

现在假设将初始值传递为- 11,则输出为:-

代码语言:javascript
复制
x: 11   y: 2
x:     y: 4
x:     y: 6
x:     y: 8

这里的解释是一样的-

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

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

注意:在x:之后,当你什么也看不见的时候。为什么?因为nil.to_s是空字符串,即""

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22972271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档