Moo обрабатывает => "Роль" не работает
Что касается меня, я не могу понять, почему это не работает так, как в документации сказано, что это должно. Я погуглил проблему, так что искал, посмотрел на источник и т. Д. Является ли это ошибкой или я делаю что-то не так, что просто не вижу.
Вот код: #!/ Usr/bin/env perl
use strict;
use warnings;
package Model;
use Moo::Role;
has ObjectID => (
is => 'rw'
);
package Object;
use Moo;
use namespace::clean;
has model => (
is => 'rw',
handles => 'Model'
);
package main;
my $xo = Object->new;
$xo->ObjectID(12345);
exit;
попытка бежать
perl -MCarp::Always t/moohandles.t
и получить это
Attempted to access 'model' but it is not set at (eval 26) line 20.
Object::_assert_model('Object=HASH(0x1dfd118)') called at (eval 25) line 17
Object::ObjectID('Object=HASH(0x1dfd118)', 12345) called at t/moohandles.t line 27
1 ответ
Решение
Делегация существенно расширяет $xo->ObjectID
вызов метода для $xo->model->ObjectID
, Но $xo->model
в настоящее время не установлено. Вы, вероятно, хотите установить его по умолчанию для объекта, который потребляет Model
роль.
Что-то вроде этого:
use strict;
use warnings;
{
package Model;
use Moo::Role;
has ObjectID => (
is => 'rw',
);
}
{
package ModelClass;
use Moo;
with 'Model';
}
{
package Object;
use Moo;
has model => (
is => 'rw',
handles => 'Model',
builder => sub { ModelClass->new },
);
}
my $xo = Object->new;
$xo->ObjectID(12345);
print $xo->ObjectID, "\n";