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

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

Вопрос

Я хотел бы просто объявить атрибут только для чтения в 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 , по-видимому, необходима для запрета установки атрибута из конструктора.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top