Actions
Bug #21142
openLazy enumerator `.each_with_index` ignores `.take(0)` before it
Description
Minimum code to produce problem:
class Numbers; def each; 100.times { yield _1 }; end; include Enumerable; end
Numbers.new.lazy.take(0).each_with_index.map { _1 }.to_a
Output (at ruby 3.2.7, and 3.3.0):
[0, 1, ..., 99]
Expected output (and was as at ruby 3.1.4):
[]
It works when it opposite ordering: Numbers.new.lazy.each_with_index.take(0).map { _1 }.to_a
.
I suspect it may be related to the change here https://github.com/ruby/ruby/pull/11868/files but I'm not familiar with any of that code. It seems like it replaces an allocated index with a counting index, which my hunch is it works for every value except for 0.
No data to display
Actions
Like0