2016-02-04 51 views
0
############################################################################### 
# 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, 
     ); 
    }, 
); 

我想有使用其他屬性來創建一個mConnection對象私有屬性_connection。我遇到的問題是在_connection的默認子程序中,$_[0]->primary_cluster始終是undef。有什麼辦法可以保證創建屬性的順序,還是有更好的方法可以做到這一點?一個屬性的默認子對象如何使用Moose訪問另一個屬性?

我不希望這個屬性是懶惰的;我需要在構建對象時創建它。

回答

2

該對象仍在構建中!延遲您的屬性的初始化,直到構建它。它的使用,直到出現以下延遲其初始化:

lazy => 1 

你也可以使用一個BUILD方法,而不是一個default

sub BUILD { 
    my $self = shift; 

    $self->_connection(
     Core::mConnection->new(
     primary_cluster => $self->primary_cluster, 
     secondary_cluster => $self->secondary_cluster, 
    ) 
    ); 
} 

當然,您需要先將屬性設置爲可寫。

相關問題