Project

General

Profile

Bug #18751

Updated by Eregon (Benoit Daloze) 8 months ago

This script repros: 
 ```ruby 
 class C 
   class << self 
     alias_method :n, :new 
     private :new 
   end 
 end 

 p C.method(:n) == C.method(:new) # => true 

 puts 
 p C.method(:n) == Class.method(:new) # => false 
 p C.method(:n) == Class.method(:new).unbind.bind(C) # => true 

 puts 
 p C.method(:new) == Class.method(:new) # => false 
 p C.method(:new) == Class.method(:new).unbind.bind(C) # => true, BUT false on master 
 p C.method(:new) == Class.instance_method(:new).bind(C) # => true, BUT false on master 
 p [C.method(:new), Class.instance_method(:new).bind(C)] # => [#<Method: #<Class:C>(Class)#new(*)>, #<Method: #<Class:C>(Class)#new(*)>] 
 ``` 

 So this prints the expected results on 2.7.5, 3.0.3, 3.1.1 but not on master, which seems a regression. 
 Notably this breaks the pattern discussed in https://bugs.ruby-lang.org/issues/18729#note-5, and it means there is no way to find out if two methods share the same "definition/logic/def", which is a big limitation.

Back