Unexpected value of __callee__ when including a module
I noticed a surprising behavior when invoking
__callee__ in an aliased method.
When invoked via a method created by
__callee__ ignores the name of the old method (here
xxx) and returns the name of the new method, as below:
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:
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:
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
Is this a bug, or is there an important difference between superclass inheritance and module inclusion that I've failed to grasp here?