Как я могу предотвратить установку атрибутов только для чтения Perl Moose при вызове new?
-
06-07-2019 - |
Вопрос
Я хотел бы просто объявить атрибут только для чтения в 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"]);
Решение
Используйте конфигурацию атрибута 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;
Другие советы
Как насчет
package SOD::KuuAnalyze::ProdId;
use Moose;
has 'users' => ( isa => 'ArrayRef[Str]', is => 'ro', init_arg => undef, default => sub { [ 'one', 'two' ] } );
Установка init_arg
в undef
, по-видимому, необходима для запрета установки атрибута из конструктора. Р>
Не связан с StackOverflow