在Moose中,您可以一次声明一组属性,假设初始化参数相同:
has [qw( foo bar baz )] => (
is => 'ro',
isa => 'Str',
required => 1,
);
这是一个可爱的功能,可以节省大量的打字。但是,我发现自己对如何使用这种语法定义谓词,更清晰甚至是构建器方法感到困惑。
has 'foo' => (
is => 'ro',
isa => 'Str',
required => 1,
clearer => 'clear_foo',
predicate => 'has_foo',
);
我可以使用哪个参数为我列表中的所有属性构建标准的'has_X , 'clear_X
和_build_X
方法吗?
答案 0 :(得分:9)
has $_ => (
is => 'ro',
isa => 'Str',
required => 1,
clearer => '_clear_' . $_,
# etc...
) for (qw(foo bar baz);
请注意lazy_build => 1
会自动生成清除程序,并且
谓词,但他们将永远是公开的,这开始是皱眉头
在穆斯社区。 (我不认为有人在博客上写过这个,
但它最近一直是关于IRC #moose的话题。)
答案 1 :(得分:1)
lazy_build => 1,
这也标志着他们懒惰,但that's recommended表示属性与构建器。