Project

General

Profile

Actions

Bug #17789

closed

Incompatible behavior of Enumarator::Lazy#with_index

Added by soudai_s (Soudai Sasada) 2 months ago. Updated 2 months ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin20]
[ruby-core:103336]

Description

this method ignores the block passed to it, but this behavior looks different from the Enumerator (super class).

$ ruby -e '%w(a).lazy.with_index { |s, i| puts "#{s} => #{i}" }'
a => 0 # Expected, but doesn't actually print anything

After confirmation I found #16414 but this behavior was not fixed and the doc in the modified source code states: "If a block given, iterates the given block for each element".
Is this behavior intended?

Updated by zverok (Victor Shepelev) 2 months ago

It doesn't ignores the block. It is just lazy to perform it :)

%w(a).lazy.with_index { |s, i| puts "#{s} => #{i}" }
# => #<Enumerator::Lazy: ...>

%w(a).lazy.with_index { |s, i| puts "#{s} => #{i}" }.force
# a => 0

Updated by soudai_s (Soudai Sasada) 2 months ago

It means it's no longer compatible with 2.6 or under, isn't it?
Thank you for quick reply!

Updated by jeremyevans0 (Jeremy Evans) 2 months ago

  • Status changed from Open to Closed

This is expected. The behavior has changed. All bug fixes are incompatibilities.

Actions

Also available in: Atom PDF