diff options
-rw-r--r-- | doc/syntax/literals.rdoc | 1 | ||||
-rw-r--r-- | range.c | 28 |
2 files changed, 29 insertions, 0 deletions
diff --git a/doc/syntax/literals.rdoc b/doc/syntax/literals.rdoc index 62b80db04b..08eefd21de 100644 --- a/doc/syntax/literals.rdoc +++ b/doc/syntax/literals.rdoc @@ -333,6 +333,7 @@ its ending value. (1..2) # includes its ending value (1...2) # excludes its ending value + (1..) # endless range, representing infinite sequence from 1 to Infinity You may create a range of any object. See the Range documentation for details on the methods you need to implement. @@ -1485,6 +1485,34 @@ range_alloc(VALUE klass) * ('a'..'e').to_a #=> ["a", "b", "c", "d", "e"] * ('a'...'e').to_a #=> ["a", "b", "c", "d"] * + * == Endless Ranges + * + * An "endless range" represents and semi-infinite ranges. + * Literal notation for an endless range is: + * + * (1..) + * # or similarly + * (1...) + * + * Which is equivalent to + * + * (1..nil) # or similarly (1...nil) + * Range.new(1, nil) # or Range.new(1, nil, true) + * + * Endless ranges are useful, for example, for idiomatic slicing of + * arrays: + * + * [1, 2, 3, 4, 5][2...] # => [3, 4, 5] + * + * Some implementation details: + * + * * +end+ of endless range is +nil+; + * * +each+ of endless range enumerates infinite sequence (may be + * useful in combination with Enumerable#take_while or similar + * methods); + * * <code>(1..)</code> and <code>(1...)</code> are not equal, + * although technically representing the same sequence. + * * == Custom Objects in Ranges * * Ranges can be constructed using any objects that can be compared |