Como posso evitar que Perl Moose atributos somente leitura sendo assentado sobre uma chamada para novo?

StackOverflow https://stackoverflow.com/questions/1814046

Pergunta

Eu gostaria de simplesmente declarar a ler único atributo em Moose que não pode ser inicializado em uma chamada para o novo. Então, depois de declarar o seguinte:

package SOD::KuuAnalyze::ProdId;

use Moose;

has 'users' => (isa => 'ArrayRef[Str]', is => "ro");

1;

Eu não quero o seguinte para o trabalho:

my $prodid = SOD::KuuAnalyze::ProdId->new(users => ["one", "two"]);
Foi útil?

Solução

Use a configuração atributo init_arg (ver "parâmetros do construtor" em Moose :: manual :: Atributos ):

package SOD::KuuAnalyze::ProdId;
use Moose;

has 'users' => (
    isa => 'ArrayRef[Str]', is => "ro",
    init_arg => undef,    # do not allow in constructor
);
1;

Outras dicas

Como cerca

package SOD::KuuAnalyze::ProdId;

use Moose;

has 'users' => ( isa => 'ArrayRef[Str]', is => 'ro', init_arg => undef, default => sub { [ 'one', 'two' ] } );

Como definir a init_arg para undef parece ser necessária para impedir definindo o atributo do construtor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top