mirror of
https://github.com/ruby/ruby.git
synced 2026-01-27 12:34:21 +00:00
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.
42 lines
769 B
Ruby
42 lines
769 B
Ruby
class Binding
|
|
# :nodoc:
|
|
def irb(...)
|
|
begin
|
|
require 'irb'
|
|
rescue LoadError, Gem::LoadError
|
|
Gem::BUNDLED_GEMS.force_activate 'irb'
|
|
require 'irb'
|
|
end
|
|
irb(...)
|
|
end
|
|
|
|
# suppress redefinition warning
|
|
alias irb irb # :nodoc:
|
|
end
|
|
|
|
module Kernel
|
|
def pp(*objs)
|
|
require 'pp'
|
|
pp(*objs)
|
|
end
|
|
|
|
# suppress redefinition warning
|
|
alias pp pp # :nodoc:
|
|
|
|
private :pp
|
|
end
|
|
|
|
module Enumerable
|
|
# Makes a set from the enumerable object with given arguments.
|
|
# 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
|