请考虑以下代码:
module M
def original ; puts __callee__ ; end
alias_method :aliased, :original
end
class A
include M
end
A.new.original
#⇒ original
A.new.aliased
#⇒ aliased
上面的代码在Ruby 2.1中运行得非常好,并返回实际的方法名称,因为它应该由Kernel#__callee__
完成。
令人惊讶的是,上面的代码在Ruby 2.3.1中没有按预期工作:
A.new.original
#⇒ original
A.new.aliased
#⇒ original
这是我在发行说明中找不到的理想行为,还是2.3中的MRI错误? alias
也是如此。
PS我创建了一个问题https://bugs.ruby-lang.org/issues/12761