Это описание 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__
?
DEFINITION.call
. - person user513951   schedule 17.11.2014:two
. - person Gabriel de Oliveira   schedule 17.11.2014