Скажем, я определяю абстрактную реализацию My :: Object и конкретной роли My :: Object :: TypeA и My :: Object :: TypeB. По причинам удобства обслуживания я бы не хотел иметь жестко закодированную таблицу, которая рассматривает тип объекта и применяет роли. В качестве примера DWIMmy, я ищу что-то вдоль этих линий в My :: Object:Как составить существующую роль Moose в классе во время выполнения?
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')
Будет ли это делать то, что я хочу, или я на совершенно неправильном пути?
Редактировать: Я упростил это слишком много; Я не хочу знать тип, когда я создаю объект, я хочу, чтобы объект определял его тип и надлежащим образом применял методы правильной роли. Я отредактировал свой вопрос, чтобы сделать это более ясным.
Нет, не знаю. Был более опытным вопросом, убедившись, что я правильно понял мета-документацию и что я не пошел по неправильному пути. – Oesor
Moose и Perl в целом очень хороши в качестве экспериментального языка. Если у вас есть вопрос, попробуйте и посмотрите, какие результаты. Если вы не понимаете результатов *, то спрашивайте ... вы сэкономите много времени, ожидая кого-то другого, чтобы подтвердить/опровергнуть вашу гипотезу. – perigrin