Этот вопрос проверяет, как Ruby находит методы в классе и связанных модулях.
Ruby ищет метод сначала в самом объекте, затем в его классе, подключенных модулях (через include), суперклассах и в конечном итоге в классе BasicObject.
Ruby использует цепочку поиска (method lookup path), чтобы найти вызываемый метод.
Порядок поиска:
Сначала Ruby проверяет объект на наличие singleton-метода.
Затем проверяет класс объекта.
Ищет методы в подключенных модулях (include).
Переходит к суперклассу (superclass).
Завершает поиск в базовом классе BasicObject.
Пример:
module Greet
def hello
"Hello from Greet!"
end
end
class Person
include Greet
end
person = Person.new
puts person.hello # => "Hello from Greet!"Метод hello сначала ищется в объекте person, затем в классе Person, и только потом в модуле Greet.
Чтобы увидеть цепочку поиска, можно использовать метод ancestors:
puts Person.ancestors.inspect