Define Set#to_set so that aSet.to_set returns self.

* lib/set.rb (Set#to_set): Define Set#to_set so that aSet.to_set
  returns self. [Fixes GH-359]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42051 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
knu 2013-07-19 02:22:11 +00:00
Родитель 74201103a9
Коммит ad78cf4ea8
4 изменённых файлов: 22 добавлений и 0 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Fri Jul 19 11:16:54 2013 Akinori MUSHA <knu@iDaemons.org>
* lib/set.rb (Set#to_set): Define Set#to_set so that aSet.to_set
returns self. [Fixes GH-359]
Fri Jul 19 11:10:23 2013 Zachary Scott <e@zzak.io>
* lib/rake/*: [DOC] Capitalize "Ruby" in documentation

4
NEWS
Просмотреть файл

@ -137,6 +137,10 @@ with all sufficient information, see the ChangeLog file.
=== Stdlib compatibility issues (excluding feature bug fixes)
* Set
* incompatible changes:
* Set#to_set now returns self instead of generating a copy.
* URI
* incompatible changes:
* URI.decode_www_form follows current WHATWG URL Standard.

Просмотреть файл

@ -148,6 +148,16 @@ class Set
@hash.keys
end
# Returns self if no arguments are given. Otherwise, converts the
# set to another with klass.new(self, *args, &block).
#
# In subclasses, returns klass.new(self, *args, &block) unless
# overridden.
def to_set(klass = Set, *args, &block)
return self if instance_of?(Set) && klass == Set && block.nil? && args.empty?
klass.new(self, *args, &block)
end
def flatten_merge(set, seen = Set.new) # :nodoc:
set.each { |e|
if e.is_a?(Set)

Просмотреть файл

@ -625,6 +625,9 @@ class TC_Enumerable < Test::Unit::TestCase
assert_instance_of(Set, set)
assert_equal([-10,-8,-6,-4,-2], set.sort)
assert_same set, set.to_set
assert_not_same set, set.to_set { |o| o }
set = ary.to_set(SortedSet)
assert_instance_of(SortedSet, set)
assert_equal([1,2,3,4,5], set.to_a)