0

我正在尝试编写将采用数组并返回数组的 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

4

1 回答 1

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(:+)
于 2013-02-09T00:30:41.210 回答