1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

range.c: Documentation on endless ranges.

Based on patch by Victor Shepelev [DOC] [#7552]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66369 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
marcandre 2018-12-12 19:49:22 +00:00
parent 103e8d5bc7
commit 296bd00e02
2 changed files with 29 additions and 0 deletions

View file

@ -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.

28
range.c
View file

@ -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