mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Deprecate passing arguments to Set#to_set and Enumerable#to_set
Array#to_a, Hash#to_h, Enumerable#to_a, and Enumerable#to_h do not allow you to specify subclasses. This has undesired behavior when passing non-Set subclasses. All of these are currently allowed, and none make sense: ```ruby enum = [1,2,3].to_enum enum.to_set(Hash) enum.to_set(Struct.new("A", :a)) enum.to_set(ArgumentError) enum.to_set(Thread){} ``` Users who want to create instances of a subclass of Set from an enumerable should pass the enumerable to SetSubclass.new instead of using to_set.
This commit is contained in:
parent
2f80117ce4
commit
0b07d2a1e3
Notes:
git
2025-06-05 16:24:19 +00:00
4 changed files with 27 additions and 5 deletions
|
@ -28,7 +28,14 @@ end
|
|||
|
||||
module Enumerable
|
||||
# Makes a set from the enumerable object with given arguments.
|
||||
def to_set(klass = Set, *args, &block)
|
||||
# Passing arguments to this method is deprecated.
|
||||
def to_set(*args, &block)
|
||||
klass = if args.empty?
|
||||
Set
|
||||
else
|
||||
warn "passing arguments to Enumerable#to_set is deprecated", uplevel: 1
|
||||
args.shift
|
||||
end
|
||||
klass.new(self, *args, &block)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue