Когда вы определяете класс, он по умолчанию наследует Object
. Если вы сделаете его подклассом любого другого класса, тогда он унаследует, что другой класс. Но это подклассирование может быть выполнено только тогда, когда вы впервые определяете свой пользовательский класс, используя ключевое слово class
или метод Class::new
. После того как вы определили его, когда вы снова откроете свой класс во второй раз и дальше, вам не будет позволено ИЗМЕНИТЬ свой класс суперкласс.
В вашем примере:
# here you are defining your new class A, so you can make it now a subclass of
# the parent class of any, like P1
class A < P1
end
# here you are reopeing the same class A. Now you are not again allowed to change the
# super class of it, which is P1.
class A < P2
end
Что вы можете сделать, это, сделать P1
и P2
модулей, а затем включает их внутри A
в любое время вы хотите, чтобы во время вашей программы.
Я отредактировал вопрос, потому что в нем было так много шума. Поэтому определения конкретного метода исчезли из него. Возможно, вы захотите удалить это. Это сделает ваш ответ более точным. – sawa
Вызов метода не имеет отношения к ошибке. Ошибка возникает в момент класса A
sawa
@sawa Согласен. Я также редактировал. Спасибо, что рассказали мне об изменении содержания сообщения. –