Ruby add / sum变量

时间:2016-02-03 10:36:27

标签: ruby

我正在寻找有关其原因的解释:

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

2 个答案:

答案 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没有:+方法。