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 はそのままでは非ハッシュリファレンス クラスをサブクラス化できず、Graph はそのインスタンスに arrayref を使用します。ドキュメントではこれについて言及しており、MooseX::InsideOutを使用して、他のインスタンス タイプを持つ Moose 以外のクラスとの互換性を有効にすることを提案しています。

于 2012-06-21T16:50:43.937 に答える
2

Moose 以外のクラスがインスタンス タイプとして使用する参照は、Moose が使用しているインスタンス タイプと一致する必要があります。Moose のデフォルトのインスタンス タイプは hashref です。

GraphARRAYREFをインスタンス タイプとして使用します。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 に答える