这是Kernel#__method__
根据 Ruby-Doc.org的描述(强调添加):
将当前方法定义处的名称作为符号返回。如果在方法外调用,则返回
nil
.
现在考虑以下代码片段:
DEFINITION = proc { __method__ }
class C
define_method :one, DEFINITION
define_method :two, DEFINITION
end
o = C.new
当我使用 MRI v1.8.7+ 运行以下命令时,我得到了预期的结果:
o.one #=> :one
o.two #=> :two
但是,当我使用 JRuby 1.7+ 运行相同的代码时(我还没有测试过以前的版本):
o.one #=> :two
o.two #=> :two
这可以被认为是 JRuby 实现中的一个缺陷,还是仅仅是对Kernel#__method__
?