From: "shugo (Shugo Maeda)" Date: 2012-12-28T11:36:06+09:00 Subject: [ruby-core:51168] [ruby-trunk - Bug #7613] An Alias for a class method inherited from the Class class is not equal to the original method 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] 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 # => #, # 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/