зеркало из https://github.com/github/ruby.git
* lib/set.rb (SortedSet#add): Do not let an uncomparable object
in. [Bug #118] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23320 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
35899279e8
Коммит
8dded0725b
|
@ -1,3 +1,8 @@
|
|||
Fri May 1 16:44:11 2009 Akinori MUSHA <knu@iDaemons.org>
|
||||
|
||||
* lib/set.rb (SortedSet#add): Do not let an uncomparable object
|
||||
in. [Bug #118]
|
||||
|
||||
Fri May 1 13:18:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* eval_intern.h (_longjmp): never return. see [ruby-core:23241]
|
||||
|
|
42
lib/set.rb
42
lib/set.rb
|
@ -20,7 +20,7 @@
|
|||
#
|
||||
# The method +to_set+ is added to Enumerable for convenience.
|
||||
#
|
||||
# See the Set class for an example of usage.
|
||||
# See the Set and SortedSet documentation for examples of usage.
|
||||
|
||||
|
||||
#
|
||||
|
@ -451,7 +451,35 @@ class Set
|
|||
end
|
||||
end
|
||||
|
||||
# SortedSet implements a set which elements are sorted in order. See Set.
|
||||
#
|
||||
# SortedSet implements a Set that guarantees that it's element are
|
||||
# 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.
|
||||
#
|
||||
# Also, all elements must be <em>mutually comparable</em>: <tt>el1 <=>
|
||||
# el2</tt> must not return <tt>nil</tt> for any elements <tt>el1</tt>
|
||||
# and <tt>el2</tt>, else an ArgumentError will be raised when
|
||||
# iterating over the SortedSet.
|
||||
#
|
||||
# == Example
|
||||
#
|
||||
# require "set"
|
||||
#
|
||||
# set = SortedSet.new(2, 1, 5, 6, 4, 5, 3, 3, 3)
|
||||
# ary = []
|
||||
#
|
||||
# set.each do |obj|
|
||||
# ary << obj
|
||||
# end
|
||||
#
|
||||
# p ary # => [1, 2, 3, 4, 5, 6]
|
||||
#
|
||||
# set2 = SortedSet.new(1, 2, "3")
|
||||
# set2.each { |obj| } # => raises ArgumentError: comparison of Fixnum with String failed
|
||||
#
|
||||
class SortedSet < Set
|
||||
@@setup = false
|
||||
|
||||
|
@ -476,6 +504,12 @@ class SortedSet < Set
|
|||
@hash = RBTree.new
|
||||
super
|
||||
end
|
||||
|
||||
def add(o)
|
||||
o.is_a?(Comparable) or raise ArgumentError, "value must be comparable"
|
||||
super
|
||||
end
|
||||
alias << add
|
||||
}
|
||||
rescue LoadError
|
||||
module_eval %{
|
||||
|
@ -495,9 +529,9 @@ class SortedSet < Set
|
|||
end
|
||||
|
||||
def add(o)
|
||||
o.is_a?(Comparable) or raise ArgumentError, "value must be comparable"
|
||||
@keys = nil
|
||||
@hash[o] = true
|
||||
self
|
||||
super
|
||||
end
|
||||
alias << add
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче