From: "nobu (Nobuyoshi Nakada)" Date: 2012-08-03T11:45:53+09:00 Subject: [ruby-core:46955] [ruby-trunk - Feature #6824] StopIteration gets a source method Issue #6824 has been updated by nobu (Nobuyoshi Nakada). Description updated You should use assert_same instead of assert_equal, I think. ---------------------------------------- Feature #6824: StopIteration gets a source method https://bugs.ruby-lang.org/issues/6824#change-28618 Author: jasiek (Jan Szumiec) Status: Open Priority: Normal Assignee: Category: core Target version: 2.0.0 =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 -- http://bugs.ruby-lang.org/