From: "mame (Yusuke Endoh)" Date: 2013-02-17T15:51:16+09:00 Subject: [ruby-core:52361] [ruby-trunk - Bug #7696][Assigned] Lazy enumerators with state can't be rewound Issue #7696 has been updated by mame (Yusuke Endoh). Subject changed from Lazy enumerators with state can't be rewound to Lazy enumerators with state can't be rewound Status changed from Open to Assigned Target version changed from 2.0.0 to next minor ---------------------------------------- Bug #7696: Lazy enumerators with state can't be rewound https://bugs.ruby-lang.org/issues/7696#change-36409 Author: marcandre (Marc-Andre Lafortune) Status: Assigned Priority: High Assignee: matz (Yukihiro Matsumoto) Category: core Target version: next minor 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/