将多个参数传递给块

jon*_*opf 1 ruby

我正在阅读'红宝石编程语言'并且遇到了以下代码.

a.inject do | sum, x |
    sum + x
end
Run Code Online (Sandbox Code Playgroud)

我理解x包含一个将被传递给bock的元素但是'sum'部分让我感到困惑,它是某种运算符或函数还是只是像x这样的另一个变量.我理解x变量可以被称为f,或者v,但是如果是这样的话,ruby知道x是那个将元素传递给迭代器的变量,那么它可以很容易地将变量传递给sum(如果它甚至是变数).

我希望这是有道理的,因为我总是发现它必须把我的困惑放到工作中,好像我更好地理解问题的本质,我会更有可能找到我自己的解决方案.

谢谢!

勿绮语*_*勿绮语 7

sum是累加器对象,例如以下代码:

(1..10).inject(0) do |sum, num| #sum is initialized to 0 and passed in as the accumulator
    sum + num #since sum is the accumulator, the result of this addition is stored in sum
end
Run Code Online (Sandbox Code Playgroud)

以上代码与:

sum = 0
(1..10).each do 
    |num|
    sum = sum + num
end
Run Code Online (Sandbox Code Playgroud)

您可以为累加器对象提供任何有效的变量名称,当然最好在上下文中使用有意义的名称.