Moose:扩展导出器导致构造函数消失?

时间:2009-11-27 04:39:51

标签: perl moose exporter

这是我无法弄清楚的奇怪之处。我有一个Moose类,我也想使用古老的标准Exporter模块导出一些常量。但是,一旦我将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。

2 个答案:

答案 0 :(得分:4)

假设您继承自另一个基于Moose的类,因此它不会从Moose :: Object继承。我不确定标准答案是什么:只需手动添加Moose :: Object或以某种方式使用MooseX :: NonMoose或其他东西。

但即使没有继承,出口商也能正常工作;只需导入其导入例程:

use Exporter "import";

答案 1 :(得分:2)

你已经得到了真正的答案,但真正的问题是你为什么有一个导出东西并且是对象的模块?这是一个非常奇怪的设计,可能是代码味道。