Actions
Feature #20664
openAdd `before` and `until` options to Enumerator.produce
Status:
Open
Assignee:
-
Target version:
-
Description
Enumerator.produce provides a nice way to generate an infinite sequence but is a bit awkward to define how to end a sequence. It lacks a simple and easy way to produce typical finite sequences in an intuitive syntax.
This proposal attempts to solve the problem by adding these two options to the method:
-
before
: when provided, it is used as a predicate to determine if an iteration should end before a generated value gets yielded. -
until
: when provided, it is used as a predicate to determine if an iteration should end until after a generated value gets yielded.
Any value that responds to to_proc
and returns a Proc
object is accepted in these options.
A typical use case for the before
option is traversing a tree structure to iterate over the ancestors or following/preceding siblings of a node.
The until
option can be used when there is a clear definition of the "last" value to yield.
enum = Enumerator.produce(File, before: :nil?, &:superclass)
enum.to_a #=> [File, IO, Object, BasicObject]
enum = Enumerator.produce(3, until: :zero?, &:pred)
enum_to_a #=> [3, 2, 1, 0]
Files
Actions
Like1
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like1Like0Like0