enn*_*ler 6 perl attributes moose new-operator
我想在Moose中声明一个只读属性,在调用new时无法初始化.在声明以下内容之后:
package SOD::KuuAnalyze::ProdId;
use Moose;
has 'users' => (isa => 'ArrayRef[Str]', is => "ro");
1;
Run Code Online (Sandbox Code Playgroud)
我不希望以下工作:
my $prodid = SOD::KuuAnalyze::ProdId->new(users => ["one", "two"]);
Run Code Online (Sandbox Code Playgroud)
Eth*_*her 13
使用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;
Run Code Online (Sandbox Code Playgroud)
怎么样
package SOD::KuuAnalyze::ProdId;
use Moose;
has 'users' => (
isa => 'ArrayRef[Str]',
is => 'ro',
init_arg => undef,
default => sub { [ 'one', 'two' ] },
);
Run Code Online (Sandbox Code Playgroud)
设置init_argtoundef似乎是禁止从构造函数设置属性所必需的。