Issue #7613 has been updated by shugo (Shugo Maeda).


shugo (Shugo Maeda) wrote:
> open == new returns false because their owners are different.
> 
>   p [open.owner, new.owner] #=> [#<Class:Stream>, Class]

I forgot to explain why Method#== returns false if owners are different.
If owners of methods are different, the behavior of super is different in the methods,
so Method#== should not return true for the methods.

----------------------------------------
Bug #7613: An Alias for a class method inherited from the Class class is not equal to the original method
https://bugs.ruby-lang.org/issues/7613#change-35118

Author: zhangsu (Su Zhang)
Status: Closed
Priority: Normal
Assignee: 
Category: core
Target version: 1.9.3
ruby -v: ruby 1.9.3p327 (2012-11-10) [i386-mingw32]


    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 `Method#==`:

> Two method objects are equal if they are bound to the same object and refer to the same method definition.

Here, `open` and `new` are all bound to `Stream` and I expect them to refer to the method definition too.


-- 
http://bugs.ruby-lang.org/