2016-06-30 3 views
-1

Пусть A, B, C, D - классы Moose.Множественное наследование из общего базового класса в Perl Moose

Пусть оба B и C наследуют от A. Пусть также D наследует от обоих B и C.

Что будет с «дублировать» свойства (свойства от А присутствует в обоих B и C)?

+0

Избегайте множественного наследования, подобного чуме. Избегайте наследования, как грипп. Где это применимо, вместо этого используйте роли. –

ответ

2

См Method Dispatch Order в Modern Perl:

Способ доставки заказа (или заказа разрешение метода или MRO) является очевидным для неполных классов. Посмотрите в классе объекта, потом его родителя и так далее, пока не найдете метод или не закончите родителей. Классы, которые унаследованы от нескольких родителей (множественное наследование), -Hovercraft расширяет лодку и автомобиль, требуют более сложной отправки. Рассуждение о множественном наследовании является сложным. Избегайте множественного наследования, когда это возможно. (выделение мое)

В Perl 5 используется стратегия определения метода глубины. Он ищет класс первого имени родителя и всех родителей этого родителя рекурсивно, прежде чем искать классы последующих родителей. Прага mro (Pragmas) предоставляет альтернативные стратегии, в том числе стратегию C3 MRO, которая ищет непосредственных родителей данного класса, прежде чем искать кого-либо из их родителей.

+0

Это не ответ: я спрашиваю об обмене полями не методами. Так что (IMHO) метод отправки заказов не совсем то, что я спрашиваю о – porton