Это описание Kernel#__method__
according to Ruby-Doc.org (подчеркивание добавлено):Является ли реализация JRuby Kernel #__ method__ сломанной?
Возвращает имя при определении текущего метода как символ. Если вызывается вне метода, он возвращает
nil
.
Теперь рассмотрим следующий фрагмент кода:
DEFINITION = proc { __method__ }
class C
define_method :one, DEFINITION
define_method :two, DEFINITION
end
o = C.new
Когда я запускаю следующее с помощью МРТ 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 (совместимости) ... – kares