在我的一生中,我无法理解为什么这不像文档所说的那样起作用。我在谷歌上搜索了这个问题,查看了源代码,等等。这是一个错误,还是我做错了什么,我就是看不见。
下面是代码:#!/usr/bin/
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发布于 2014-12-12 23:07:24
委托实际上扩展了$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";https://stackoverflow.com/questions/27452825
复制相似问题