我正在尝试使用ruby编写一个小函数,该函数从用户获取数组,然后汇总数组中的数据。我把它写成
def sum(a)
total = 0
a.collect { |a| a.to_i + total }
end
然后该函数运行一个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)
我做错了什么?
答案 0 :(得分:2)
您不应该使用map
/ collect
。 reduce
/ inject
是适当的方法
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
答案 1 :(得分:0)
见这里:How to sum array of numbers in 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
答案 2 :(得分:0)
gets.split.map(&:to_i).inject(:+)