扩展非驼鹿类:不是访问者的HASH参考

时间:2012-06-21 16:12:23

标签: perl moose

我正在尝试扩展非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();

3 个答案:

答案 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