2014-12-12 18 views
0

Для жизни я не могу понять, почему это не работает так, как написано в документации. Я искал проблему SO, искал источник и т. Д. Является ли это ошибкой или делаю что-то неправильно, чего я просто не вижу.Moo handles => 'Role' не работает

Вот код: #/USR/бен/окр 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 

ответ

4

Делегация существенно расширяет $xo->ObjectID метод call to $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"; 

 Смежные вопросы

  • Нет связанных вопросов^_^