Project

General

Profile

Feature #8840

Yielder#state

Added by marcandre (Marc-Andre Lafortune) almost 7 years ago. Updated over 2 years ago.

Status:
Rejected
Priority:
Normal
Target version:
[ruby-core:56894]

Description

Defining an Enumerator that require a state is currently troublesome. For example, it is not really possible to define an equivalent of Lazy#drop in Ruby without making an assumption on the implementation.

To address this, I propose that we

(a) guarantee that a new Yielder object will be given for each enumeration
(b) add a 'state' attribute to Yielder.

This way, one could implement Lazy#drop in a way similar to:

class Enumerator::Lazy < Enumerator
def drop(n)
n = n.to_i
Lazy.new(self) do |yielder, *values|
yielder.state ||= n
if yielder.state > 0
yielder.state -= 1
else
yielder.yield(*values)
end
end
end
end

Note that (a) is currently true for Ruby MRI, JRuby and Rubinius, but it is not explicit in the documentation.


Files

state.pdf (87.8 KB) state.pdf marcandre (Marc-Andre Lafortune), 08/31/2013 07:57 AM

Related issues

Related to Ruby master - Bug #7696: Lazy enumerators with state can't be rewoundClosedmatz (Yukihiro Matsumoto)01/15/2013Actions

Also available in: Atom PDF