2

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

3 回答 3

3

MooseX::NonMoose 不能开箱即用,使您能够对非 hashref 类进行子类化,并且 Graph 对其实例使用 arrayref。文档提到了这一点,并建议使用MooseX::InsideOut来实现与具有其他实例类型的非 moose 类的兼容性。

于 2012-06-21T16:50:43.937 回答
2

非 Moose 类用作其实例类型的引用必须与 Moose 正在使用的实例类型匹配。Moose 的默认实例类型是 hashref。

Graph用作ARRAYREF其实例类型。MooseX::InsideOut是解决方案。

package MyGraph;

use Moose;
use MooseX::InsideOut;
use MooseX::NonMoose;

extends 'Graph';
于 2012-06-21T16:59:31.997 回答
-1

我从来没有这样做过,但这看起来可能是你想要的。http://metacpan.org/pod/MooseX::NonMoose

于 2012-06-21T16:48:55.560 回答