2010-08-04 2 views
0

Как бы вы назвали пакет, единственная цель которого заключалась в расширении другого модуля, чтобы вы могли применять к нему роли? Мне нужен пакет, который расширяет (подклассы) Template::Context с Moose Итак, я могу создавать роли и черты, чтобы применить к нему, но я не знаю, как назвать этот пакет (класс). Любой совет?Как вы называете класс/пакет/модуль, например

ответ

3

С момента своего определения роли, специфичного для лося, у меня будет Moose в названии. Template :: Context :: Moosified. Или Template :: Context :: WithAntlers.

Но наличие промежуточного подкласса просто для того, чтобы вы могли наклеить роли на нем, это странно. Вы можете пропустить этого посредника и просто объявить составные классы напрямую.

package Template::Context::ForBreakfast; 

use Moose; 
extends "Template::Context"; 
with "Bacon", "Eggs", "Toast"; 

Название класса должно выпадать из состава ролей.

+0

Я на самом деле не планирую использовать их как/role/(например, используя 'with'). Я планирую использовать их в качестве признаков и добавить их в класс более динамично. – xenoterracide

1

Я не уверен, что это одобрено, но вы всегда можете попробуйте, применяя эту роль напрямую.

package R; 
use Moose::Role; 
sub f { say 42 } 

package main; 
use URI; 
R->meta->apply(Moose::Meta::Class->initialize('URI')); 
URI->new->f 

Конечно это нужно некоторые обсахаривании вверх, не имеет абсолютно никаких гарантий на работу на долгий срок, и, вероятно, совершенно не поддерживается. Это, однако, то, как MOP unsugared эффективно работает.