ruby array input
我试图用Ruby编写一个小函数,它从用户那里得到一个数组,然后汇总数组中的数据。我把它写成
1 2 3 4 | def sum(a) total = 0 a.collect { |a| a.to_i + total } end |
然后,该函数通过一个rspec运行,该rspec首先向它输入一个空数组来测试它。这将导致以下错误
1 2 3 4 | sum computes the sum of an empty array Failure/Error: sum([]).should == 0 expected: 0 got: [] (using ==) |
号
所以它告诉我,当它给空数组输入时,它应该得到0,但是它得到数组。我试着写一个if语句
1 2 3 4 5 | def sum(a) total = 0 a.collect { |a| a.to_i + total } if total = [] then { total = 0 end } end |
但它给了我一个错误的说法
1 | syntax error, unexpected '}', expecting => (SyntaxError) |
。
我做错什么了?
你不应该用
1 2 3 4 5 6 7 8 | 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 | gets.split.map(&:to_i).inject(:+) |
看这里:如何在Ruby中求和数字数组?
这里是:http://www.ruby-doc.org/core-1.9.3/enumerable.html method-i-inject
1 2 3 | def sum(a) array.inject(0) {|sum,x| sum + x.to_i } end |