[ruby-core:121076] [Ruby master Bug#21142] Lazy enumerator `.each_with_index` ignores `.take(0)` before it
From:
"aaronkison (Aaron Kison) via ruby-core" <ruby-core@...>
Date:
2025-02-17 00:26:36 UTC
List:
ruby-core #121076
Issue #21142 has been reported by aaronkison (Aaron Kison).
----------------------------------------
Bug #21142: Lazy enumerator `.each_with_index` ignores `.take(0)` before it
https://bugs.ruby-lang.org/issues/21142
* Author: aaronkison (Aaron Kison)
* Status: Open
* ruby -v: 3.2.7
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
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.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/