我正在尝试扩展非moose类,当我调用moose为我的扩展类定义的访问器时,我收到以下错误:
Not a HASH reference at accessor MyGraph::weight (defined at MyGraph.pm line 8) line 8
这是简化的代码:
package MyGraph;
use Moose;
use MooseX::NonMoose;
extends 'Graph';
has 'weight' => (
is => 'ro',
isa => 'Num',
);
no Moose;
__PACKAGE__->meta->make_immutable;
package main;
my $g = MyGraph->new;
$g->weight();
答案 0 :(得分:3)
MooseX :: NonMoose不会开箱即用,使您能够继承非hashref类,而Graph使用arrayref作为其实例。文档提到了这一点,并建议使用MooseX::InsideOut来启用与具有其他实例类型的非moose类的兼容性。
答案 1 :(得分:2)
非Moose类用作其实例类型的引用必须与Moose正在使用的实例类型匹配。 Moose的默认实例类型是hashref。
Graph
使用ARRAYREF
作为其实例类型。 MooseX::InsideOut
是解决方案。
package MyGraph;
use Moose;
use MooseX::InsideOut;
use MooseX::NonMoose;
extends 'Graph';
答案 2 :(得分:-1)
我从来没有这样做但看起来这可能是你想要的。 http://metacpan.org/pod/MooseX::NonMoose