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

Document usage of ArithmeticSequence in Array#slice, and add to NEWS (#3952)

This commit is contained in:
Victor Shepelev 2020-12-21 02:32:30 +02:00 committed by GitHub
parent 6be61ab264
commit 5253b9579a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
Notes: git 2020-12-21 09:32:55 +09:00
Merged-By: mrkn <mrkn@ruby-lang.org>
3 changed files with 26 additions and 4 deletions

View file

@ -149,6 +149,14 @@ Outstanding ones only.
* Array#uniq
* Array#*
* Can be sliced with Enumerator::ArithmeticSequence
```ruby
dirty_data = ['--', 'data1', '--', 'data2', '--', 'data3']
dirty_data[(1..).step(2)] # take each second element
# => ["data1", "data2", "data3"]
```
* ConditionVariable
* ConditionVariable#wait may now invoke the `block`/`unblock` scheduler

19
array.c
View file

@ -1775,11 +1775,22 @@ static VALUE rb_ary_aref2(VALUE ary, VALUE b, VALUE e);
* a[4..0] # => nil
* a[4..-1] # => nil
*
* When a single argument +aseq+ is given,
* ...(to be described)
* When a single Enumerator::ArithmeticSequence argument +aseq+ is given,
* returns an Array of elements corresponding to the indexes produced by
* the sequence.
* a = ['--', 'data1', '--', 'data2', '--', 'data3']
* a[(1..).step(2)] # => ["data1", "data2", "data3"]
*
* Raises an exception if given a single argument
* that is not an \Integer-convertible object or a \Range object:
* Unlike slicing with range, if the start or the end of the arithmetic sequence
* is larger than array size, throws RangeError.
* a = ['--', 'data1', '--', 'data2', '--', 'data3']
* a[(1..11).step(2)]
* # RangeError (((1..11).step(2)) out of range)
* a[(7..).step(2)]
* # RangeError (((7..).step(2)) out of range)
*
* If given a single argument, and its type is not one of the listed, tries to
* convert it to Integer, and raises if it is impossible:
* a = [:foo, 'bar', 2]
* # Raises TypeError (no implicit conversion of Symbol into Integer):
* a[:foo]

View file

@ -3333,6 +3333,9 @@ enumerator_plus(VALUE obj, VALUE eobj)
* that is a representation of sequences of numbers with common difference.
* Instances of this class can be generated by the Range#step and Numeric#step
* methods.
*
* The class can be used for slicing Array (see Array#slice) or custom
* collections.
*/
VALUE