From: knu@... Date: 2017-10-22T02:12:21+00:00 Subject: [ruby-core:83488] [Ruby trunk Feature#8840][Rejected] Yielder#state Issue #8840 has been updated by knu (Akinori MUSHA). Status changed from Feedback to Rejected I guess the API is not good enough if you have to do `yielder.state ||= ���`, and it looks like akr's suggestion works. Since there has been no feedback, I'm closing this. ---------------------------------------- Feature #8840: Yielder#state https://bugs.ruby-lang.org/issues/8840#change-67499 * Author: marcandre (Marc-Andre Lafortune) * Status: Rejected * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) * Target version: 2.2.0 ---------------------------------------- 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) -- https://bugs.ruby-lang.org/ Unsubscribe: