Unerwarteter Wert von __callee__ beim Einbinden eines Moduls - ist das ein Ruby-Fehler?

Wenn über eine von @ erstellte Methode aufgerufalias_method, __callee__ ignoriert den Namen der alten Methode (hierxxx) und gibt den Namen der neuen Methode wie folgt zurück:

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

Foo.new.foo # => :foo

Dieses Verhalten gilt auch, wennxxx wird von einer Superklasse geerbt:

class Sup
  def xxx() __callee__ end
end

class Bar < Sup
  alias_method :bar, :xxx
end

Bar.new.bar # => :bar

Wenn beide oben genannten Bedingungen erfüllt sind, würde ich davon ausgehen, dass dasselbe Verhalten gilt, wennxxx wird über ein Modul eingebunden. Dies ist jedoch nicht der Fall:

module Mod
  def xxx() __callee__ end
end

class Baz
  include Mod
  alias_method :baz, :xxx
end

Baz.new.baz # => :xxx

Ich erwarte, dass der Rückgabewert @ i:baz, nicht:xxx.

Der obige Code wurde mit Ruby 2.3.1p112 ausgeführt. Ist das ein Fehler in der Implementierung von__callee__? Oder vielleicht vonalias_method? Und wenn nicht, kann jemand erklären, warum sich die Moduleinbeziehung anders verhält?

UPDATE 1

Ich habeat dies im Ruby Bug Tracker gepost, um eine Antwort zu finden.

UPDATE 2

nscheinend bin ichNicht der einzig von diesem Problem überrascht zu sein. Ich frage mich obRevision 50728 (das sollte lösen Bug 11046:__callee__ gibt in orphan proc @ einen falschen Methodennamen zurü) könnte verwandt sein.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage