Project

General

Profile

Bug #12058

Updated by nobu (Nobuyoshi Nakada) about 8 years ago

I noticed a surprising behavior when invoking `__callee__` in an aliased method. 

 When invoked via a method created by `alias_method`, `__callee__` ignores the name of the old method (here `xxx`) and returns the name of the new method, as below: 

 ~~~ruby ~~~ 
 class Foo 
   def xxx() __callee__ end 
   alias_method :foo, :xxx 
 end 

 Foo.new.foo # => :foo 
 ~~~ 

 This behavior holds even when `xxx` is inherited from a superclass: 

 ~~~ruby ~~~ 
 class Sup 
   def xxx() __callee__ end 
 end 

 class Bar < Sup 
   alias_method :bar, :xxx 
 end 

 Bar.new.bar # => :bar 
 ~~~ 

 Given both of the above, I would expect that the same behavior would hold when `xxx` is included via a module. However, that is not the case: 

 ~~~ruby ~~~ 
 module Mod 
   def xxx() __callee__ end 
 end 

 class Baz 
   include Mod 
   alias_method :baz, :xxx 
 end 

 Baz.new.baz # => :xxx 
 ~~~ 

 I expect the return value to be `:baz`, not `:xxx`. 

 Is this a bug, or is there an important difference between superclass inheritance and module inclusion that I've failed to grasp here? 

 Origin: http://stackoverflow.com/questions/35281623/unexpected-value-of-callee-when-including-a-module-is-this-a-ruby-bug

Back