An Alias for a class method inherited from the Class class is not equal to the original method
class Stream class << self alias_method :open, :new end end open = Stream.method(:open) new = Stream.method(:new) p open, new # => #<Method: Stream.new>, #<Method: Class#new> p open.receiver, new.receiver # => Stream, Stream p open == new # => false
Expect the last line to return true, but got false. According to the documentation for
Two method objects are equal if they are bound to the same object and refer to the same method definition.
new are all bound to
Stream and I expect them to refer to the method definition too.