【问题标题】:Why is Array#inject called inject? [closed]为什么 Array#inject 称为注入? [关闭]
【发布时间】:2017-12-23 18:48:03
【问题描述】:

我了解Array#inject 的用法和用途,但为什么叫inject?我不明白在哪里注入了什么。

【问题讨论】:

  • 与 Ruby 无关,BTW.
  • 简单的回答:因为它的主要父级 Smalltalk 如此称呼它。 (其实是inject:into:
  • @Amadan 在 smalltalk 中注入是什么意思?这是否意味着将累加器注入块中?
  • 谁知道呢。语法是ary inject: init into: block

标签: arrays ruby inject


【解决方案1】:

我更喜欢将inject 视为在给定数组内的项目之间“注入”一个操作并返回计算的最终结果。

(1..5).inject(:+)  #=> 15

在我的示例中,它采用数字 1 到 5 并在它们之间“注入”一个求和运算,得到 1 + 2 + 3 + 4 + 5 = 15

另外,它的别名是reduce,如https://ruby-doc.org/core-2.4.1/Enumerable.html#method-i-inject 中的详细说明。

【讨论】:

  • 从累加器的角度来考虑呢?就像在每次迭代时将累加器注入块中一样?
  • 是的,因为它遍历数组/枚举器中的每个项目并在当前项目和累加器之间应用操作,然后为下一次迭代“重写”累加器。 inject 这个名字很混乱,所以我更喜欢这样想。
  • 也可以“注入”和初始对象(或值),例如(1..5).inject(10,&:+) #=> 25
  • 我发现@rodsoars 思考inject 的方法非常有趣。我已经在我的article on Ruby's inject/reduce method 中看到了它。我曾经认为它是@engineersmnky(还有一个简单的可视化)。
猜你喜欢
  • 2013-10-14
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 2013-01-21
  • 2011-07-05
  • 2015-08-10
相关资源
最近更新 更多