errors/stop_iteration/result_parens.rb

tests/_examples/errors/stop_iteration/result_parens.rb in the metorex repository.

class Countdown
  def each
    yield 3
    yield 2
    yield 1
    :liftoff
  end
end

enumerator = Countdown.new.to_enum

puts(enumerator.next)
puts(enumerator.next)
puts(enumerator.next)

begin
  enumerator.next
rescue StopIteration => error
  puts(error.message)
  p error.result
end

enumerator.rewind
puts(enumerator.next)

class NoReturnValue
  def each
    yield :only
    nil
  end
end

exhausted = NoReturnValue.new.to_enum
exhausted.next

begin
  exhausted.next
rescue StopIteration => error
  p error.result
end

p(StopIteration.new("built by hand").result)

Output:

3
2
1
iteration reached an end
:liftoff
3
nil
nil