Project

General

Profile

Bug #7696

Lazy enumerators with state can't be rewound

Added by marcandre (Marc-Andre Lafortune) about 8 years ago. Updated over 7 years ago.

Status:
Closed
Priority:
Normal
Target version:
ruby -v:
r38800
Backport:
[ruby-core:51430]

Description

The 4 lazy enumerators requiring internal state, i.e. {take|drop}{_while}, don't work as expected after a couple next and a call to rewind.

For example:

e=(1..42).lazy.take(2)
e.next # => 1
e.next # => 2
e.rewind
e.next # => 1
e.next # => StopIteration: iteration reached an end, expected 2

This is related to #7691; the current API does not give an easy way to handle state.

Either there's a dedicated callback to rewind, or data must be attached to the yielder.


Related issues

Related to Ruby master - Bug #7691: 3 bugs with Lazy enumerators with stateClosed01/14/2013Actions
Related to Ruby master - Feature #8840: Yielder#stateRejectedmatz (Yukihiro Matsumoto)Actions

Also available in: Atom PDF