В Ruby методы не являются обычными объектами, которые программист может использовать для них, как для Strings и Arrays. Таким образом, хотя класс Method
имеет метод name()
, при вызове метода name()
он ищется в SomeClass
, а его предки - [Object, Kernel, BasicObject]
Это можно увидеть, проверив self
в любом определении метода в SomeClass
. Он вернет SomeClass
как себя.
Следовательно, вы получаете undefined method
исключение. Вы можете использовать __method__
, чтобы получить имя текущего метода.
class SomeClass
def initialize
puts __method__
end
end
__method__
возвращает символ. Вы можете использовать метод to_s
, чтобы получить строковое представление метода.