Project

General

Profile

Actions

Feature #18515

closed

Add Range#reverse_each implementation

Added by kyanagi (Kouhei Yanagita) about 2 years ago. Updated 6 months ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:107285]

Description

PR is https://github.com/ruby/ruby/pull/5489 https://github.com/ruby/ruby/pull/8525

Current Range#reverse_each uses Enumerable#reverse_each which is implemented with #to_a.
So we are virtually not able to use reverse_each for a very large or beginless range, even if few elements are iterated on actually.

(1..2**100).reverse_each { |x| p x; break if x.odd? }
(..5).reverse_each { |x| p x; break if x == 0 }
(1..2**32).reverse_each.lazy.select { |x| Prime.prime?(x) }.take(3).to_a

This patch, implements Range#reverse_each for Integer elements, enables these examples.

I think #reverse_each for an endless range should raise an exception.
This is a different issue, so I'll create another ticket later.
-> posted: https://bugs.ruby-lang.org/issues/18551

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0