Issue #14084 has been reported by tessi (Philipp Tessenow).

----------------------------------------
Feature #14084: Add Enumerator#next?
https://bugs.ruby-lang.org/issues/14084

* Author: tessi (Philipp Tessenow)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
I'd like to propose a new method for Enumerator which returns whether there will be a next value when calling `next`.

It should work like this ruby demo:

~~~ ruby
class Enumerator
  def next?
    begin
      peek
    rescue StopIteration
      return false
    end
    true
  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)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>