Ruby Array:添加数字的方法

Ruby Array: Methodology to add numbers

本问题已经有最佳答案,请猛点这里访问。

我正在尝试编写代码,它将获取一个数组并返回数组的和。首先,这是将数字放入数组的正确方法吗?基于错误,这似乎有问题。

1
2
3
4
5
6
    def total(num)
       x = []
       x << num
       puts x.inject(0){|a,b|a+b}

    end

这里好像有一些问题。首先,当我使用sum([3,2,41,2])调用方法时,会得到这个错误:

1
`total': wrong number of arguments (5 for 1) (ArgumentError) from calculator.rb:11

我还记得有个错误:cant't covert fixnum into array


你的inject块是正确的。您的参数错误是因为您定义了采用单个参数的方法,但是在您的示例中,您用四个参数来调用它。如果要使用可变数量的参数,可以使用splat运算符*,它可以执行各种操作-在这种情况下,它将把所有未定义的参数收集到一个数组中:

1
2
3
4
5
def total(*nums)
  nums.inject(0) {|a,b| a + b }
end

total(3,2,41,2) #=> 48

您可以使用带有inject的符号进一步简化此过程:

1
nums.inject(0, :+) #=> 48

这是通过将符号表示的方法发送到累加器,使用数组的每个成员作为参数(相当于将块定义为{|a, b| a.send(:+, b) })。

实际上,在这种情况下,不需要定义初始值。Inject有第三种形式,只需使用数组的第一个成员作为初始值,并将其他成员相加:

1
nums.inject(:+)