我编写了一个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
对象?
答案 0 :(得分:4)
引用Moose::Manual::Attributes on Laziness:
首先,如果是默认值 属性取决于其他一些 属性,然后属性必须 懒。在对象构建期间, 在a中不生成默认值 可预测的顺序,所以你无法计算 在其他一些属性上 生成默认值时填充。