Ruby 'Range.last' does not give the last value. Why?

range, ruby

Solution

This is by design. The Ruby 2.0 documentation is more specific:

Note that with no arguments `last` will return the object that defines the end of the range even if `exclude_end?` is `true`.

(10..20).last      #=> 20
(10...20).last     #=> 20
(10..20).last(3)   #=> [18, 19, 20]
(10...20).last(3)  #=> [17, 18, 19]

Problem

When using the triple dot notation in a ruby Range object, I get this: ``` (0...5).each{|n| p n} 0 1 2 3 4 ``` When I use the 'last' method I get: ``` (0...5).last => 5 ``` I would have expected 4 Is this is a bug? Or is there something I don't understand about the the concept of a Range object?

Original source