я создал два класса, как показано нижерубин Наследование и перезапись класс метод
class Parent
def self.inherited(child)
child.custom_class_method
end
def self.custom_class_method
raise "You haven't implemented me yet!"
end
end
class Child < Parent
def self.custom_class_method
"hello world"
end
end
Это кажется, что, когда Наследование Child < Parent
оценивается, она вызывает self.inherited
, что, в свою очередь, повышает версию Parent
«s из self.custom_class_method
вместо Child
. Это проблема, потому что вместо того, чтобы ожидаемый "hello world"
я получаю сообщение об ошибке поднял говоря "You haven't implemented me yet!"
Child
ли «s self.custom_class_method
не получить оценку только после Parent
» s self.inherited
завершена оценка? И если это так, возможно, работа вокруг этого? Должен ли я просто не поставить raise
на родительский класс?
Это кажется странным. Единственный способ получить родительский 'custom_class_method' должен состоять в вызове' super'. В противном случае просто вызванный 'Child.custom_class_method' должен привести к вашему« привет миру ». Не могли бы вы предоставить более глубокие каротажи? –
Хммм Я согласен, что это должно быть! Но кажется, что я могу воспроизвести это, просто скопировав код в консоль «irb». Из-за этой причины он ошибается при оценке класса 'Child'. – aMat