2010-11-12 4 views
6

Je souhaite avoir un attribut Moose non requis qui ne peut être défini qu'une seule fois.Puis-je créer un attribut Moose "write once"?

Si j'utilise is => 'ro', je dois définir l'attribut lors de la création de l'objet, mais je veux pouvoir l'ajouter après (tant que ce n'est pas déjà fait).

Répondre

5

Utilisez un modificateur de la méthode:

has 'attr' => (
    is => 'rw', 
    predicate => 'is_set', 
    ... 
}; 

before 'attr' => sub { 
    my $self = shift; 
    die 'attr already set' if $self->is_set; 
}; 
+0

vous utiliseriez « autour » d'arrêter la méthode appeler de cette façon vous ne devez pas mourir – qodeninja

+0

aussi ne pas utiliser meurent, s'il vous plaît ne jamais utiliser de mourir, mourir est mauvais et devrait mourir. utiliser croak, ou confesser à la place. – xenoterracide

+0

qodeninja: ça dépend. Vous voudrez peut-être renflouer et laisser l'appelant le piéger. –

Questions connexes