Методы класса для дочерних классов Ruby
Решая задачу, наткнулся на такой код Условие задачи: https://www.codewars.com/kata/5200165c39ae4c612200027b/
class Mother
def self.phone_kids
ObjectSpace.each_object(Class) {|klass| klass.phone if klass < Mother}
end
end
Mother.phone_kids
class Foo < Mother
end
class Bar < Mother
end
он выводится без ошибок, что меня немного смущает, ведь метод phone нигде не определен, не могли бы помочь разобраться
Ответы (1 шт):
Автор решения: Василиса
→ Ссылка
Если выполнять код именно в такой последовательности, как в вашем вопросе, то отсутствие ошибок вполне понятно.
Вы вызываете Mother.phone_kids до того, как определили Foo и Bar, значит условие if klass < Mother не выполняется ни для одного класса, значит klass.phone не вызывается.
Если же классы определить до вызова Mother.phone_kids, то получаем ожидаемую undefined method 'phone' for Foo:Class.