注入方法如何工作?

时间:2017-12-01 00:34:05

标签: ruby

我是Ruby的初学者,我遇到了一个代码片段,其中包含以下内容:

def add(*nums)
  nums.inject(&:+)
end

示例:

add(1, 2)
#=> 3
add(1, 2, 3, 4)
#=> 10

代码段如何工作?

3 个答案:

答案 0 :(得分:2)

如文档中所述:https://apidock.com/ruby/Enumerable/inject

enumerable(array, range, ..)

  

通过应用二进制操作组合枚举的所有元素,   由命名方法或运算符的块或符号指定。

你可以像[1, 2, 3].inject { |sum, number| sum + number } 一样使用它,

[1, 2, 3].inject(&:+)

或简写风格,

(&:+)

如果您对此spring-boot-starter-parent version 1.5.6.RELEASE及其运作方式感到疑惑,请同时查看,

What do you call the &: operator in Ruby?

答案 1 :(得分:1)

在文档中它说它的作用如下:

# Same using a block and inject
(5..10).inject { |sum, n| sum + n } #=> 45

https://ruby-doc.org/core-2.4.2/Enumerable.html#method-i-inject

EG。总计1,2,3,4等于10

答案 2 :(得分:1)

正如我在answer中所做的那样,使用puts打印每个步骤,看看发生了什么:

def add(*nums)
  nums.inject { |sum, element|
    puts "",
         "sum is #{sum} and element is #{element}",
         "new sum is #{sum} + #{element} = #{sum + element}",
         "-" * 25
    sum + element
  }
end

add(1, 2, 3, 4)
#sum is 1 and element is 2
#new sum is 1 + 2 = 3
#-------------------------

#sum is 3 and element is 3
#new sum is 3 + 3 = 6
#-------------------------

#sum is 6 and element is 4
#new sum is 6 + 4 = 10
#-------------------------
#=> 10