Project

General

Profile

Feature #18515

Updated by kyanagi (Kouhei Yanagita) about 2 years ago

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

 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

Back