2017-12-18 1208 views
-2

我想与功能的阵列来概括的数字:如何总结数字阵列中的

def total(numbers) 
numbers.each do |e| 
    total_number = e + total_number 
    return total_number 
end 
end 

puts total([1,2,3,4]) 

但我不断收到错误消息说:

零不能被强制到Fixnum(repl):18:在'+'

任何人都可以看到我做错了什么?

each> do循环在函数外部工作。

+2

'total_number'最初是'nil',所以你有'total_number = e + nil'。你可能想在循环之后返回,而不是在循环之内。 – Stefan

回答

5

您还没有初始化total_number变量,所以它给这个错误,试试这个

def total(numbers) 
total_number = 0 
numbers.each do |e| 
    total_number += e # Same as your total_number = e + total_number 
end 
return total_number 
end 

puts total([1,2,3,4]) 

但是,最好的办法是使用红宝石内置数组的方法。

array = [1, 2, 3, 4] 
total_number = array.inject(:+) 
+1

另一件事最初是错误的,但是在这个答案中已经修复了return语句的位置。它在循环中,所以函数在第一次迭代中返回,只产生数组的第一个数字。 –

+3

'return'在这里不需要 –

+0

这会解决这个问题,虽然我会说@AlexGolubenko有这样做的正确方法。没有必要重新发明轮子,无论这个方法可能微不足道。 – SRack

5

有许多不同的方式来做到这一点:

numbers.sum 

numbers.inject(:+) 

等等。不要害羞检查docs下一次;)

+0

@Stefan当然,我在编辑的时候已经晚了,而我正在考虑重构方法的一个可能的变体) –

+0

也许你可以展示如何用'external'来重构OP的方法,用外部计数器来'用'注入''来注入' '只需':+'到'sum'。 – Stefan