在Moose中,在定义多个属性时如何声明谓词和更清晰的方法?

时间:2010-10-12 00:39:47

标签: perl moose

在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方法吗?

2 个答案:

答案 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表示属性与构建器。