Valor inesperado de __callee__ cuando se incluye un módulo: ¿es esto un error de Ruby?

Cuando se invoca a través de un método creado poralias_method, __callee__ ignora el nombre del método anterior (aquíxxx) y devuelve el nombre del nuevo método, como se muestra a continuación:

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

Foo.new.foo # => :foo

Este comportamiento se mantiene incluso cuandoxxx se hereda de una superclase:

class Sup
  def xxx() __callee__ end
end

class Bar < Sup
  alias_method :bar, :xxx
end

Bar.new.bar # => :bar

Dado lo anterior, esperaría que el mismo comportamiento se mantuviera cuandoxxx Se incluye a través de un módulo. Sin embargo, este no es el caso:

module Mod
  def xxx() __callee__ end
end

class Baz
  include Mod
  alias_method :baz, :xxx
end

Baz.new.baz # => :xxx

Espero que el valor de retorno sea:bazno:xxx.

El código anterior se ejecutó usando Ruby 2.3.1p112. ¿Es esto un error en la implementación de__callee__? O tal vez dealias_method? Y si no, ¿alguien puede explicar por qué la inclusión de módulos se comporta de manera diferente?

ACTUALIZACIÓN 1

Hepublicó esto en el rastreador de errores Ruby para tratar de agitar una respuesta.

ACTUALIZACIÓN 2

Aparentemente soyNo el único estar sorprendido por este problema. me pregunto siRevisión 50728 (que estaba destinado a resolverBug 11046:__callee__ devuelve un nombre de método incorrecto en el proceso huérfano) podría estar relacionado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta