From: "shugo (Shugo Maeda)" Date: 2013-01-16T17:39:41+09:00 Subject: [ruby-core:51466] [ruby-trunk - Bug #7696] Lazy enumerators with state can't be rewound Issue #7696 has been updated by shugo (Shugo Maeda). marcandre (Marc-Andre Lafortune) wrote: > 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. #7691 is the basically same issue as #6142. Do you have a draft API spec in mind? It might be too late to introduce a new API, though. ---------------------------------------- Bug #7696: Lazy enumerators with state can't be rewound https://bugs.ruby-lang.org/issues/7696#change-35444 Author: marcandre (Marc-Andre Lafortune) Status: Open Priority: High Assignee: Category: core Target version: 2.0.0 ruby -v: r38800 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. -- http://bugs.ruby-lang.org/