From: "alanwu (Alan Wu) via ruby-core" Date: 2025-03-11T14:21:19+00:00 Subject: [ruby-core:121295] [Ruby master Bug#21142] Lazy enumerator `.each_with_index` ignores `.take(0)` before it Issue #21142 has been updated by alanwu (Alan Wu). Assignee deleted (alanwu (Alan Wu)) The pull request you point was released with 3.4, but the problem started with 3.2, so it's not due to the change in the pull request. ---------------------------------------- Bug #21142: Lazy enumerator `.each_with_index` ignores `.take(0)` before it https://bugs.ruby-lang.org/issues/21142#change-112258 * 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/