我正在寻找一种从父Moose类而不是独立实用程序类中设置一些帮助方法的方法。如果可能的话,这将是一种将 Moose 糖添加到模块中的更透明的方式,因为它不需要明确要求任何辅助模块(因为一切都将通过extends声明来实现)。
根据文档中提供的示例,这大致是我想要的:
package Parent;
use Moose;
Moose::Exporter->setup_import_methods(
with_meta => [ 'has_rw' ],
as_is => [ 'thing' ],
also => 'Moose',
);
sub has_rw {
my ( $meta, $name, %options ) = @_;
$meta->add_attribute(
$name,
is => 'rw',
%options,
);
}
# then later ...
package Child;
use Moose;
extends 'Parent';
has 'name';
has_rw 'size';
thing;
但是,这不起作用:
perl -I. -MChild -wle'$obj = Child->new(size => 1); print $obj->size'
在 Child.pm 第 10 行,“has_rw 'size'”附近的操作员预期的位置找到字符串
(是否需要预先声明 has_rw?)
Child.pm 第 10 行的语法错误,靠近“has_rw 'size'”
在 Child.pm 第 12 行使用“strict subs”时不允许使用裸词“thing”。
编译失败。
BEGIN 失败——编译中止。
PS。我也尝试将导出魔法移动到一个角色(with Role;而不是extends Parent;)中,但是会发生同样的错误。