Project

General

Profile

Feature #14084

Updated by tessi (Philipp Tessenow) about 7 years ago

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: 

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

Back