1

ここに私が理解できない奇妙なことがあります。古い標準の Exporter モジュールを使用して、いくつかの定数もエクスポートしたい Moose クラスがあります。ただし、クラスに追加extends Exporterするとすぐに、何らかの理由で、デフォルトの Moose コンストラクターが継承されなくなり、致命的なエラーが発生します。

Can't locate object method "new" via package "MyApp::Dispatch"

これは、問題を示す簡単なテストです。

package Foo;
use Moose;
use constant NARF => 'poit';
extends 'Exporter';

1;

$ perl -I./lib -MFoo -e '$f=Foo->new'
Can't locate object method "new" via package "Foo" at -e line 1.

行を削除extendsすると、問題がなくなります。

これは Moose 0.93 を使用しています。

4

2 に答える 2

4

別の Moose ベースのクラスから継承していると想定しているため、Moose::Object からは継承されません。標準的な答えがどうなるかはわかりません.Moose::Objectを手動で追加するか、MooseX::NonMooseなどを使用してください。

ただし、継承されていない場合でも、エクスポーターは問題なく機能します。そのインポート ルーチンをインポートするだけです。

use Exporter "import";
于 2009-11-27T05:09:04.770 に答える
2

あなたはすでに本当の答えを得ていますが、本当の質問は、なぜオブジェクトをエクスポートするモジュールを持っているのですか? これはかなり奇妙な設計で、コードの匂いかもしれません。

于 2009-11-27T05:25:38.953 に答える