如何设置Moose只读属性特征?
package AttrTrait;
use Moose::Role;
has 'ext' => ( isa => 'Str', is => 'ro' );
package Class;
has 'foo' => ( isa => 'Str', is => 'ro', traits => [qw/AttrTrait/] );
package main;
my $c = Class->new( foo => 'ok' );
$c->meta->get_attribute('foo')->ext('die') # ro attr trait
如果您无法在构造函数或运行时中设置Read Only属性特征,那么它的目的是什么? Moose::Meta::Attribute中有没有我遗漏的东西?有没有办法使用meta
设置它?
$c->meta->get_attr('ext')->set_value('foo') # doesn't work either (attribute trait provided not class provided method)
答案 0 :(得分:6)
您可以在构造函数中设置它:
package Class;
has 'foo' => ( isa => 'Str', is => 'ro', ext => 'whatever', traits => ['AttrTrait'] );
您只需将其传递给正确的构造函数(属性的构造函数)。
答案 1 :(得分:-1)
我使用default
来处理ro
属性:
package Foo;
use Moose;
has 'myattr' => (is => 'ro', default => 'my value goes here');
由于您不会在其他地方设置myattr
的值,因此使用默认值。