У меня есть код с использованием MooseX::Traits, который выполняет справедливую бит динамической загрузки ролей. Требование к настройке в одной из ролей не работает из-за зависимости ролей друг от друга. Есть правильный способ для достижения изображенных ниже, этот код умирает с died: Moose::Exception::RequiredMethodsNotImplementedByClass ('Constructor::Plugin' requires the method 'frobnicate' to be implemented by 'MooseX::Traits::__ANON__::SERIAL::1'
Динамически построенные объекты с MooseX :: Черты
#!/usr/bin/perl
package Constructor;
use Moose;
with 'MooseX::Traits';
use namespace::autoclean;
has '+_trait_namespace' => (default => __PACKAGE__);
sub load {
my ($class, $plugin) = @_;
my $obj_with_plugin = $class->new_with_traits(traits => ["$plugin"]);
return $obj_with_plugin;
}
__PACKAGE__->meta->make_immutable;
1;
package Constructor::Plugin;
use Moose::Role;
requires 'frobnicate';
with 'Constructor::Plugin::Component';
1;
package Constructor::Plugin::Component;
use Moose::Role;
sub frobnicate { "zark!\n" }
1;
package main;
use Test::More;
use Test::Exception;
my $thing;
lives_ok {$thing = Constructor->load('Plugin')} "instantiated ok";
ok $thing->frobnicate, "frobnicates ok";
done_testing;
Все эти '1;' в вашем файле ничего не делают. – melpomene
да, но если я хочу переместить вещи в структуру, то это еще одно дело забыть. – singingfish