【问题标题】:What does inject() do without arguments没有参数的注入()做什么
【发布时间】:2014-05-23 05:29:50
【问题描述】:

我知道括号中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 行?

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

【问题讨论】:

  • 有趣的问题,扎克。

标签: ruby inject enumerable


【解决方案1】:

那么当你把它们排除在外时会发生什么?

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

在您的情况下,第一次通过 xy 分别设置为 24

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

#inject

如果您没有为 memo 显式指定 initial 值,则将集合的 第一个元素用作 initial备忘录的价值

根据代码,一切都非常值得期待。


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

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 是空字符串,即""

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 2018-11-05
    • 2019-12-25
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    相关资源
    最近更新 更多