2016-02-12 6 views
0

Я пытаюсь заставить все дочерние классы абстрактного базового класса реализовать интерфейс. Когда я пытаюсь добавить with '<interface>' в ABC, он требует, чтобы я немедленно применил необходимые методы и добавил sub <method> {} для каждого метода интерфейса.Классы для детей реализуют интерфейс MooseX :: с MooseX :: ABC (абстрактный базовый класс)

Чтобы проиллюстрировать эту проблему,

package drawAPI { 
    use MooseX::Interface; 
    require 'draw'; 
    one; 
} 

package shape { 
    use MooseX::ABC; 
    with 'drawAPI'; 
} 

package square { 
    extends 'shape'; 
    #here is where having a draw subroutine would be inforced 
    sub draw {}; 
} 

Кто-нибудь знает способ сделать это? или может порекомендовать другой набор модулей для этого?

Благодаря

ответ

0

Документация MooseX::ABC состояний «ПРИМЕЧАНИЕ: Этот модуль почти наверняка плохая идея Вы действительно хотите быть просто используя роль вместо этого.!». В документации для MooseX::Interface говорится, что «Интерфейсы - это просто роли с несколькими дополнительными ограничениями ...». Ваш выбор модулей предполагает, что вы хотите, чтобы Moose выглядел и работал как Java, что является потерянной причиной. Хорошая новость заключается в том, что Moose Roles может почти наверняка обеспечить много, если не все поведение, которое вы ищете. Кроме того, вы можете быть удивлены некоторыми мощными вещами, которые вы можете выполнить с помощью ролей, которые не имеют аналога в Java.