Project

General

Profile

Actions

Bug #21142

open

Lazy enumerator `.each_with_index` ignores `.take(0)` before it

Added by aaronkison (Aaron Kison) 6 days ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:121076]

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

Also available in: Atom PDF

Like0