Методы класса для дочерних классов 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.

→ Ссылка