Project

General

Profile

Actions

Feature #6824

closed

StopIteration gets a source method

Added by jasiek (Jan Szumiec) almost 10 years ago. Updated over 9 years ago.

Status:
Rejected
Priority:
Normal
Target version:
[ruby-core:46929]

Description

=begin
I'd like to add a method to StopIteration that returns an instance of the enumerator which triggered this exception. Eg:

enum = [].each
begin
enum.next
rescue StopIteration => ex
puts "same" if ex.source == enum
end

This is useful when you're merging multiple collections using min/max - when one of the collections is exhausted it can be easily ignored.

enumerators = 100.times.map do
rand(100).times.map do
rand
end.sort.each
end

merged = []
while !enumerators.empty?
begin
enumerators.map(&:peek)
values = enumerators.map(&:next)

  merged += values.sort
rescue StopIteration => e
  enumerators.delete(e.source)
  retry
end

end

fail unless merged != merged.sort

Attached is a patch against trunk.
=end


Files

stop.patch (2.32 KB) stop.patch jasiek (Jan Szumiec), 08/02/2012 06:45 PM
Actions

Also available in: Atom PDF