From: "Dan0042 (Daniel DeLorme)" Date: 2022-01-28T16:16:02+00:00 Subject: [ruby-core:107326] [Ruby master Feature#18551] Make Range#reverse_each to raise an exception if endless Issue #18551 has been updated by Dan0042 (Daniel DeLorme). Yes, this is a useful change. Although wouldn't it be better to prevent `#to_a` instead of only `#reverse_each` ? Actually there's quite a lot of Enumerable methods that would be better raising an exception for endless ranges. For example: `(1..).select{ true }` results in infinite loop and memory consumption. The only way out is `break`, but then there's no point using `select` since it can't return a result. The same applies to reject, partition, sort, zip, uniq, tally, etc... ---------------------------------------- Feature #18551: Make Range#reverse_each to raise an exception if endless https://bugs.ruby-lang.org/issues/18551#change-96224 * Author: kyanagi (Kouhei Yanagita) * Status: Open * Priority: Normal ---------------------------------------- https://github.com/ruby/ruby/pull/5498 Currently, `Range#reverse_each` for an endless range never returns. ``` % ruby -e '(1..).reverse_each { }' # never return ... ``` (This is because `Enumerable#reverse_each` tries `#to_a` and `#to_a` for an endless range comes into an infinite loop.) I think `Range#reverse_each` for an endless range should raise an exception, similar to `Range#each` for a beginless range. ``` % ruby -e '(..1).each { }' -e:1:in `each': can't iterate from NilClass (TypeError) from -e:1:in `
' ``` -- https://bugs.ruby-lang.org/ Unsubscribe: