Ruby Array:添加数字的方法

时间:2013-02-09 00:08:32

标签: ruby arrays

我正在尝试编写将采用数组并返回数组的SUM的代码。 首先,这是将数字放入数组的正确方法吗?基于错误,似乎可能存在问题。

    def total(num)
       x = []
       x << num
       puts x.inject(0){|a,b|a+b}

    end

看起来这里有一些问题。首先,当我使用sum([3,2,41,2])调用方法时出现此错误:

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

我还记得收到错误:cant't covert fixnum into array

1 个答案:

答案 0 :(得分:1)

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

def total(*nums)
  nums.inject(0) {|a,b| a + b }
end

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

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

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

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

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

nums.inject(:+)