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";
Другие вопросы по тегам