diff --git a/ChangeLog b/ChangeLog index c3e6e64d59..83de327daf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri May 8 02:30:14 2009 Akinori MUSHA + + * lib/set.rb (SortedSet#add): Do not require each newly added + element to be Comparable but to respond to <=>. [ruby-dev:38371] + Thu May 7 21:42:51 2009 Yusuke Endoh * test/ruby/test_rubyoptions.rb (test_indentation_check): add a test diff --git a/lib/set.rb b/lib/set.rb index 6d298d3f85..8f2bef91ba 100644 --- a/lib/set.rb +++ b/lib/set.rb @@ -456,8 +456,8 @@ end # yielded in sorted order (according to the return values of their # #<=> methods) when iterating over them. # -# All elements that are added to a SortedSet must include the -# Comparable module. +# All elements that are added to a SortedSet must respond to the <=> +# method for comparison. # # Also, all elements must be mutually comparable: el1 <=> # el2 must not return nil for any elements el1 @@ -506,7 +506,7 @@ class SortedSet < Set end def add(o) - o.is_a?(Comparable) or raise ArgumentError, "value must be comparable" + o.respond_to?(:<=>) or raise ArgumentError, "value must repond to <=>" super end alias << add @@ -529,7 +529,7 @@ class SortedSet < Set end def add(o) - o.is_a?(Comparable) or raise ArgumentError, "value must be comparable" + o.respond_to?(:<=>) or raise ArgumentError, "value must respond to <=>" @keys = nil super end