Project

General

Profile

Actions

Feature #14084

open

Introduce Enumerator#next?

Added by tessi (Philipp Tessenow) about 4 years ago. Updated about 4 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:83683]

Description

I'd like to propose a new method for Enumerator which returns whether there will be a next value in the enumerator when calling Enumerator#next.

It should work like this ruby demo:

class Enumerator
  def next?
    peek
    true
  rescue StopIteration
    false
  end
end

a = [1,2,3]
e = a.to_enum
p e.next?   #=> true
p e.next    #=> 1
p e.next?   #=> true
p e.next    #=> 2
p e.next?   #=> true
p e.next    #=> 3
p e.next?   #=> false
p e.next    #raises StopIteration

I propose the method to be called next? as it returns either true or false.
I am aware that we can currently figure out if there is a next value by using rescue (as in the code snippet above), but it is ugly since it covers many lines and uses exceptions for control flow.
Introducing the next? method makes enumerators a little nicer to work with.

A patch with an example implementation for ruby trunk is attached (in git-diff format, any feedback welcome).
I agree that my patch will be licensed under the Ruby License.


Files

enumerator_next.diff (2.26 KB) enumerator_next.diff tessi (Philipp Tessenow), 11/06/2017 02:27 AM
Actions

Also available in: Atom PDF