###############################################################################
# Attributes
###############################################################################
has 'primary_cluster' => (
is => 'ro',
isa => 'Str',
required => TRUE,
);
has 'secondary_cluster' => (
is => 'ro',
isa => 'Str',
required => FALSE,
default => sub {$_[0]->primary_cluster},
);
has '_connection' => (
is => 'ro',
required => FALSE,
init_arg => undef,
default => sub {
Core::mConnection->new(
primary_cluster => $_[0]->primary_cluster,
secondary_cluster => $_[0]->secondary_cluster,
);
},
);
我正在尝试使用其他属性来创建_connection
对象的私有属性mConnection
。我遇到的问题是在_connection
的默认子例程中,$_[0]->primary_cluster
始终是undef。有没有办法保证属性创建的顺序,还是有更好的方法去做这个?
我不希望这个属性变得懒惰;我需要在构造对象时创建它。
答案 0 :(得分:3)
对象仍在构建中!延迟属性的初始化,直到构造完成。以下内容将其初始化延迟到使用之前:
lazy => 1
您也可以使用BUILD
方法代替default
。
sub BUILD {
my $self = shift;
$self->_connection(
Core::mConnection->new(
primary_cluster => $self->primary_cluster,
secondary_cluster => $self->secondary_cluster,
)
);
}
当然,您需要先将属性设为可写。