3

如何设置 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

如果不能在构造函数或运行时设置只读属性特征,它的目的是什么?我在Moose::Meta::Attribute中缺少什么吗?有没有办法设置它使用meta

$c->meta->get_attr('ext')->set_value('foo') # doesn't work either (attribute trait provided not class provided method)
4

2 回答 2

6

您可以在构造函数中设置它:

package Class;
has 'foo' => ( isa => 'Str', is => 'ro', ext => 'whatever', traits => ['AttrTrait'] );

您只需要将它传递给正确的构造函数(属性的构造函数)。

于 2010-06-17T19:52:39.890 回答
-1

default用来处理ro属性:

package Foo;
use Moose;
has 'myattr' => (is => 'ro', default => 'my value goes here');

而且由于您不会myattr在其他任何地方设置 ' 值,因此使用默认值。

于 2010-06-18T03:54:43.227 回答