7

我想简单地在 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"]);
4

2 回答 2

15

使用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;
于 2009-11-28T23:55:03.657 回答
4

怎么样

package SOD::KuuAnalyze::ProdId;

use Moose;

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

设置init_argtoundef似乎是不允许从构造函数设置属性的必要条件。

于 2009-11-28T23:45:06.390 回答