Exception: StopIteration

Inherits:
IndexError show all
Defined in:
enumerator.c

Overview

Raised to stop the iteration, in particular by Enumerator#next. It is rescued by Kernel#loop.

loop do
  puts "Hello"
  raise StopIteration
  puts "World"
end
puts "Done!"

produces:

Hello
Done!

Instance Method Summary collapse

Methods inherited from Exception

#==, #backtrace, #exception, exception, #initialize, #inspect, #message, #set_backtrace, #to_s

Constructor Details

This class inherits a constructor from Exception

Instance Method Details

#resultObject

Returns the return value of the iterator.

o = Object.new
def o.each
  yield 1
  yield 2
  yield 3
  100
end
e = o.to_enum
p e.next                   #=> 1
p e.next                   #=> 2
p e.next                   #=> 3
begin
  e.next
rescue StopIteration
  p $!.result              #=> 100
end


# File 'enumerator.c'

/*
 * call-seq:
 *   stopiteration.result       -> value
 *
 * Returns the return value of the iterator.
 *
 *   o = Object.new
 *   def o.each
 *     yield 1
 *     yield 2
 *     yield 3
 *     100
 *   end
 *   e = o.to_enum
 *   p e.next                   #=> 1
 *   p e.next                   #=> 2
 *   p e.next                   #=> 3
 *   begin
 *     e.next
 *   rescue StopIteration
 *     p $!.result              #=> 100
 *   end
 *
 */
static VALUE
stop_result(VALUE self)
{
    return rb_attr_get(self, rb_intern("result"));
}