1

这是我无法弄清楚的奇怪事情。我有一个 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。

4

2 回答 2

4

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

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

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

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

于 2009-11-27T05:25:38.953 回答