Actions
Feature #6824
closedStopIteration gets a source method
Feature #6824:
StopIteration gets a source method
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
Actions