Как я могу предотвратить установку атрибутов только для чтения Perl Moose при вызове new? - PullRequest
6 голосов
/ 29 ноября 2009

Я хотел бы просто объявить атрибут только для чтения в Moose, который нельзя инициализировать при вызове new Итак, после объявления следующего:

package SOD::KuuAnalyze::ProdId;

use Moose;

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

1;

Я не хочу, чтобы следующее работало:

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

Ответы [ 2 ]

13 голосов
/ 29 ноября 2009

Использование конфигурации атрибута init_arg (см. «Параметры конструктора» в Moose :: Manual :: Attributes ):

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

has 'users' => (
    isa => 'ArrayRef[Str]', is => "ro",
    init_arg => undef,    # do not allow in constructor
);
1;
4 голосов
/ 29 ноября 2009

Как насчет

package SOD::KuuAnalyze::ProdId;

use Moose;

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

Установка init_arg на undef представляется необходимой для запрета установки атрибута из конструктора.

...