扩展Moose对象类的构造顺序是什么?

时间:2010-11-12 09:53:03

标签: perl moose

我编写了一个Moose对象类,它扩展了另一个Moose对象类:

package MySubClass;
use Moose;
extends MySuperClass;

我有一个属性,我想在对象实例化时自动构建:

has 'id' => (
    is       => 'ro',
    isa      => 'Str',
    builder  => '_build_id',
    init_arg => undef,
); 

sub _build_id {
 my $self = shift;
 # both ssn and bnn are attributes of MySuperClass
 return $self->ssn . $self->bnn;
}

除非我将id设置为懒惰,否则这不起作用。为什么呢?

如何构建extend对象?

1 个答案:

答案 0 :(得分:4)

引用Moose::Manual::Attributes on Laziness

  

首先,如果是默认值   属性取决于其他一些   属性,然后属性必须   懒。在对象构建期间,   在a中不生成默认值   可预测的顺序,所以你无法计算   在其他一些属性上   生成默认值时填充。