ruby - 这个 ruby​​ 注入(inject)魔术是如何工作的?

标签 ruby

我今天看到了一个 ruby​​ 代码片段。

[1,2,3,4,5,6,7].inject(:+)  

=> 28

[1,2,3,4,5,6,7].inject(:*)  

=> 5040

这里的注入(inject)和之前看到的完全不一样,比如

[1,2,3,4,5,6,7].inject {|sum, x| sum + x}

请解释一下它是如何工作的?

最佳答案

没有魔法,符号(方法)只是可能的参数之一。这是来自文档:

  # enum.inject(initial, sym) => obj
  # enum.inject(sym)          => obj
  # enum.inject(initial) {| memo, obj | block }  => obj
  # enum.inject          {| memo, obj | block }  => obj

我们的案例是第二种。

也可以用传统的block重写:

op = :+   #  parameter of inject call
[1,2,3,4,5,6,7].inject {|sum, x| sum.send(op, x)} #  also returns 28

(回答“它是如何工作的”部分)

关于ruby - 这个 ruby​​ 注入(inject)魔术是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3455627/

相关文章:

ruby-on-rails - Ruby 测试 : block vs. 方法

ruby-on-rails - 您将如何提供用不同(语言环境)语言编写的菜单而不是在每个页面中重复它们?

ruby - 如何在 Ruby 中的命名空间类上调用命名空间方法

ruby-on-rails - Rails 无法安装在 CentOS 6.5 上

ruby - 我可以使用哪个 HTTP Web 服务器来调试使用 Rubymine 3.0.1 的 ruby​​ 代码?

ruby - 在定义中使用 `#`

ruby-on-rails - 无法运行 rake db :schema:load unless the database is already loaded

ruby - 从数组中删除空格、制表符和新行

ios - 由于权限问题,运行 pod install 进行更新时出错

ruby - 我可以在 RSpec 中 stub STDERR 吗?