[ruby-core:121140] [Ruby master Bug#21152] Enumerator's #size returned by Range#reverse_each raises an exception for endless Range

Issue #21152 has been reported by andrykonchin (Andrew Konchin). ---------------------------------------- Bug #21152: Enumerator's #size returned by Range#reverse_each raises an exception for endless Range https://bugs.ruby-lang.org/issues/21152 * Author: andrykonchin (Andrew Konchin) * Status: Open * ruby -v: 3.4.2 * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- I've noticed a change between 3.3 and 3.4 in a way how `Range#reverse_each` behaves: Ruby 3.3: ```ruby Range.new("a", nil).size # => nil Range.new(1, nil).size # => Infinity Range.new("a", nil).reverse_each.size # => nil Range.new(1, nil).reverse_each.size # => Infinity ``` Ruby 3.4 ```ruby Range.new("a", nil).size # => nil Range.new(1, nil).size # => Infinity Range.new("a", nil).reverse_each.size # can't iterate from NilClass (TypeError) Range.new(1, nil).reverse_each.size # can't iterate from NilClass (TypeError) ``` -- https://bugs.ruby-lang.org/

Issue #21152 has been updated by eileencodes (Eileen Uchitelle). This changed in https://github.com/ruby/ruby/pull/12301 to fix a similar bug. `Range.new(nil, "a").size` also raises a `TypeError` when in 3.3 it didn't. ---------------------------------------- Bug #21152: Enumerator's #size returned by Range#reverse_each raises an exception for endless Range https://bugs.ruby-lang.org/issues/21152#change-112139 * Author: andrykonchin (Andrew Konchin) * Status: Open * ruby -v: 3.4.2 * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- I've noticed a change between 3.3 and 3.4 in a way how `Range#reverse_each` behaves: Ruby 3.3: ```ruby Range.new("a", nil).size # => nil Range.new(1, nil).size # => Infinity Range.new("a", nil).reverse_each.size # => nil Range.new(1, nil).reverse_each.size # => Infinity ``` Ruby 3.4 ```ruby Range.new("a", nil).size # => nil Range.new(1, nil).size # => Infinity Range.new("a", nil).reverse_each.size # can't iterate from NilClass (TypeError) Range.new(1, nil).reverse_each.size # can't iterate from NilClass (TypeError) ``` -- https://bugs.ruby-lang.org/

Issue #21152 has been updated by eileencodes (Eileen Uchitelle). In 3.3 `each` does raise with this example: ``` Range.new(nil,1).each do |x| p x end ``` And `reverse_each` does not. It feels like to me that 3.4 is more correct than 3.3. ---------------------------------------- Bug #21152: Enumerator's #size returned by Range#reverse_each raises an exception for endless Range https://bugs.ruby-lang.org/issues/21152#change-112140 * Author: andrykonchin (Andrew Konchin) * Status: Open * ruby -v: 3.4.2 * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- I've noticed a change between 3.3 and 3.4 in a way how `Range#reverse_each` behaves: Ruby 3.3: ```ruby Range.new("a", nil).size # => nil Range.new(1, nil).size # => Infinity Range.new("a", nil).reverse_each.size # => nil Range.new(1, nil).reverse_each.size # => Infinity ``` Ruby 3.4 ```ruby Range.new("a", nil).size # => nil Range.new(1, nil).size # => Infinity Range.new("a", nil).reverse_each.size # can't iterate from NilClass (TypeError) Range.new(1, nil).reverse_each.size # can't iterate from NilClass (TypeError) ``` -- https://bugs.ruby-lang.org/

Issue #21152 has been updated by mame (Yusuke Endoh). Status changed from Open to Closed Discussed at the dev meeting, and @matz agreed with @eileencodes ; the behavior of Ruby 3.4 is better. ---------------------------------------- Bug #21152: Enumerator's #size returned by Range#reverse_each raises an exception for endless Range https://bugs.ruby-lang.org/issues/21152#change-112295 * Author: andrykonchin (Andrew Konchin) * Status: Closed * ruby -v: 3.4.2 * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- I've noticed a change between 3.3 and 3.4 in a way how `Range#reverse_each` behaves: Ruby 3.3: ```ruby Range.new("a", nil).size # => nil Range.new(1, nil).size # => Infinity Range.new("a", nil).reverse_each.size # => nil Range.new(1, nil).reverse_each.size # => Infinity ``` Ruby 3.4 ```ruby Range.new("a", nil).size # => nil Range.new(1, nil).size # => Infinity Range.new("a", nil).reverse_each.size # can't iterate from NilClass (TypeError) Range.new(1, nil).reverse_each.size # can't iterate from NilClass (TypeError) ``` -- https://bugs.ruby-lang.org/
participants (3)
-
andrykonchin (Andrew Konchin)
-
eileencodes (Eileen Uchitelle)
-
mame (Yusuke Endoh)