Скажем, я определяю абстрактные реализации My :: Object и конкретной роли My :: Object :: TypeA и My :: Object :: TypeB.Из соображений удобства обслуживания я бы не хотел иметь жестко закодированную таблицу, которая бы смотрела на тип объекта и применяла роли.В качестве примера DWIMmy я ищу что-то в этом роде в My :: Object:
has => 'id' (isa => 'Str', required => 1);
sub BUILD {
my $self = shift;
my $type = $self->lookup_type(); ## Returns 'TypeB'
{"My::Object::$type"}->meta->apply($self);
}
Позволяя мне получить My :: Object с ролью My :: Object :: TypeB, примененной путем выполненияследующее:
my $obj = My::Object(id = 'foo')
Будет ли это делать то, что я хочу, или я нахожусь на совершенно неправильном пути?
Редактировать: я слишком упростил это;Я не хочу знать тип, когда создаю экземпляр объекта, я хочу, чтобы объект определил его тип и применил правильные методы роли соответствующим образом.Я отредактировал свой вопрос, чтобы прояснить ситуацию.