Sag*_*dya 7

您可以Enumerable在Range对象上使用方法,在这种情况下使用Enumerable#inject:

(4..10).inject(:+)
 #=> 49 
Run Code Online (Sandbox Code Playgroud)

现在,在Ruby 2.4.0中,您可以使用Enumerable#sum

(4..10).sum
#=> 49 
Run Code Online (Sandbox Code Playgroud)


Car*_*and 6

def range_sum(rng)
  rng.size * (2 * rng.first + rng.size - 1) / 2
end

range_sum(4..10)   #=> 49
range_sum(4...10)  #=> 39
range_sum(-10..10) #=>  0
Run Code Online (Sandbox Code Playgroud)

这只是算术级数值之和的公式.另一个例子:

last = rng.first + rng.size - 1
Run Code Online (Sandbox Code Playgroud)

  • 我会继续声明一个左/右边界的方法而不会弄乱范围. (2认同)