【发布时间】:2015-01-14 00:03:18
【问题描述】:
这是Kernel#__method__according to Ruby-Doc.org的描述(强调):
返回名称当前方法的定义作为符号。如果在方法外调用,则返回
nil。
现在考虑以下代码 sn-p:
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__ 的不同解释?
【问题讨论】:
-
查看运行
DEFINITION.call时两种情况下会发生什么。 -
在这两种情况下,返回值都是
:two。 -
也许,只需将其报告为 JRuby(兼容性)错误 ...