如何防止在调用new时设置Perl Moose只读属性?

如何防止在调用new时设置Perl Moose只读属性?,perl,attributes,new-operator,moose,Perl,Attributes,New Operator,Moose,我只想在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"]); 怎么

我只想在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"]);
怎么样

package SOD::KuuAnalyze::ProdId;

use Moose;

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

init_arg
设置为
unde
似乎是禁止从构造函数中设置属性所必需的

使用
init_arg
属性配置(请参阅中的“构造函数参数”):


这个很好用,谢谢。然而,它默默地失败了。有没有办法让它在尝试ProdId->new(users=>['one','two'])时抛出错误?如果使用MooseX::StrictConstructor,如果将任何无效或不允许的参数传递给构造函数,模块构造将失败。我几乎在我所有的Moose类中都使用它(对于其余的类,我使用MooseX::SlurpyConstructor,它获取属性未使用的所有参数)?
package SOD::KuuAnalyze::ProdId;
use Moose;

has 'users' => (
    isa => 'ArrayRef[Str]', is => "ro",
    init_arg => undef,    # do not allow in constructor
);
1;