Каков порядок построения расширяемого класса объектов Moose? - PullRequest
2 голосов
/ 12 ноября 2010

Я написал класс объектов 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 Ответ

4 голосов
/ 12 ноября 2010

Цитировать Moose :: Manual :: Attributes on Laziness :

Во-первых, если значение по умолчанию для этого атрибута зависит от некоторых других атрибутов, то атрибут должен быть ленивым,Во время создания объекта значения по умолчанию не генерируются в предсказуемом порядке, поэтому при создании значения по умолчанию нельзя рассчитывать на заполнение какого-либо другого атрибута.

...