[ruby-core:121361] [Ruby Bug#21142] Lazy enumerator `.each_with_index` ignores `.take(0)` before it
From:
"Hanmac (Hans Mackowiak) via ruby-core" <ruby-core@...>
Date:
2025-03-14 08:07:15 UTC
List:
ruby-core #121361
Issue #21142 has been updated by Hanmac (Hans Mackowiak).
@nobu your opinion on this `take(0)` thing?
----------------------------------------
Bug #21142: Lazy enumerator `.each_with_index` ignores `.take(0)` before it
https://bugs.ruby-lang.org/issues/21142#change-112332
* 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/