0

我正在尝试用 ruby​​ 编写一个小函数,该函数从用户那里得到一个数组,然后对数组中的数据求和。我把它写成

    def sum(a)
      total = 0
      a.collect { |a| a.to_i + total }
    end

然后该函数通过一个 rspec 运行,该 rspec 最初通过向其输入一个空白数组来对其进行测试。这会导致以下错误

    sum computes the sum of an empty array
    Failure/Error: sum([]).should == 0
    expected: 0
        got: [] (using ==)

所以它告诉我,当它输入空白数组时,它应该得到 0,而是得到数组。我尝试输入一个 if 语句,写成

    def sum(a)
      total = 0
      a.collect { |a| a.to_i + total }
      if total = [] then { total = 0 end }
    end

但它给了我一个错误说

    syntax error, unexpected '}', expecting => (SyntaxError)

我究竟做错了什么?

4

3 回答 3

2

您不应该为此使用map/ 。/是合适的方法collectreduceinject

def sum(a)
  a.reduce(:+)
  # or full form
  # a.reduce {|memo, el| memo + el }

  # or, if your elements can be strings
  # a.map(&:to_i).reduce(:+)
end
于 2013-04-04T17:31:35.957 回答
0

请参见此处:如何在 Ruby 中对数字数组求和?

在这里:http ://www.ruby-doc.org/core-1.9.3/Enumerable.html#method-i-inject

def sum(a)
    array.inject(0) {|sum,x| sum + x.to_i }
end
于 2013-04-04T17:31:18.270 回答
0
gets.split.map(&:to_i).inject(:+)
于 2013-04-04T17:54:58.073 回答