Binding UnboundMethod to BasicObject
I tried to bind method from Object to BasicObject and I suddenly succeeded.
$ irb 2.3.0 :001 > BasicObject.send :define_method, :methods, Object.instance_method(:methods) => :methods 2.3.0 :002 > BasicObject.new.methods => [:!, :==, :!=, :__send__, :equal?, :methods, :instance_eval, :instance_exec, :__id__] 2.3.0 :003 >
In earlier ruby versions such code would raise an exception:
$ irb 2.2.4 :001 > BasicObject.send :define_method, :methods, Object.instance_method(:methods) TypeError: bind argument must be a subclass of Object from (irb):1:in `define_method' from (irb):1 from /Users/gordon/.rvm/rubies/ruby-2.2.4/bin/irb:11:in `<main>' 2.2.4 :002 >
Is it a bug or a feature?
Probably it is somehow related to https://bugs.ruby-lang.org/issues/11278