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 に答える