diff --git a/lib/set.rb b/lib/set.rb index a946d3c..1ba7dd7 100644 --- a/lib/set.rb +++ b/lib/set.rb @@ -361,16 +361,15 @@ def to_set(klass = Set, *args, &block) klass.new(self, *args, &block) end - def flatten_merge(set, seen = Set.new) # :nodoc: + def flatten_merge(set, seen = Set.new.compare_by_identity) # :nodoc: set.each { |e| if e.is_a?(Set) - if seen.include?(e_id = e.object_id) + unless seen.add?(e) raise ArgumentError, "tried to flatten recursive Set" end - seen.add(e_id) flatten_merge(e, seen) - seen.delete(e_id) + seen.delete(e) else add(e) end