Como posso evitar que Perl Moose atributos somente leitura sendo assentado sobre uma chamada para novo?
-
06-07-2019 - |
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"]);
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