我正在寻找有关其原因的解释:
def somesum
x = 0
(1..10).each do |number|
x += number
end
puts x
end
虽然这不起作用(未定义的方法' +'对于nil类):
def somesum
(1..10).each do |number|
x += number
end
puts x
end
这两个都没有:
def somesum
(1..10).each do |number, x|
x += number
end
puts x
end
答案 0 :(得分:3)
你的第一个例子工作的原因,是因为你初始化了x:
x = 0
而最后两个例子尝试在第一个循环中将1添加到nil,这不起作用,因为nil没有方法'+'。 请考虑一下,您的示例是实现目标的糟糕实现。 更好的解决方案是使用累加器方法。例如Enumerable#inject:
(1..10).inject(0){ |sum, number| sum += number }
甚至更好:
(1..10).inject(:+)
隐含累积。
Enumerable#reduce的作用相同:
(1..10).reduce(:+)
为了更好地理解,请阅读Iterators: inject and reject
答案 1 :(得分:1)
在第二和第三个例子中x
没有价值。请记住:
x += number
是缩短:
x = x + number
所以你正在做:
x = nil + number
和nil没有:+
方法。