注入方法如何工作



我是Ruby的初学者,我遇到了一个代码片段,该代码段:

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

示例:

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

代码段如何工作?

,如doc:https://apidock.com/ruby/enumost/inject/inject

inject

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

您可以将其与enumerable(array, range, ..)这样使用,

[1, 2, 3].inject { |sum, number| sum + number }

或短手样式,

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

如果您想知道此(&:+)及其工作原理,请还检查一下

您如何称呼Ruby中的操作员?

在文档中说它起作用如:

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

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

例如。它正在总结1,2,3,4等于10

在此答案中,请使用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

最新更新