包含模块时__callee__的意外值 - 这是一个Ruby错误吗?

use*_*951 14 ruby inheritance metaprogramming alias-method

当通过创建的方法调用时alias_method,__callee__忽略旧方法的名称(此处xxx)并返回新方法的名称,如下所示:

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

Foo.new.foo # => :foo
Run Code Online (Sandbox Code Playgroud)

即使xxx从超类继承,此行为仍然成立:

class Sup
  def xxx() __callee__ end
end

class Bar < Sup
  alias_method :bar, :xxx
end

Bar.new.bar # => :bar
Run Code Online (Sandbox Code Playgroud)

考虑到上述两种情况,我希望xxx通过模块包含相同的行为.但事实并非如此:

module Mod
  def xxx() __callee__ end
end

class Baz
  include Mod
  alias_method :baz, :xxx
end

Baz.new.baz # => :xxx
Run Code Online (Sandbox Code Playgroud)

我希望返回值:baz不是:xxx.


上面的代码是使用Ruby 2.3.1p112执行的.这是执行中的错误__callee__吗?或者也许是alias_method?如果没有,有人可以解释为什么模块包含行为不同吗?


更新1

我已将此发布到Ruby bug跟踪器,试图激起答案.


更新2

显然,我不是唯一一个对此问题感到惊讶的人.我想知道修订版50728(用于解决错误11046:__callee__在孤儿进程中返回错误的方法名称)是否可能是相关的.

use*_*951 1

这是一个错误,三天前已关闭,并附有以下说明

似乎由r56592修复。