ロールで既に宣言されている属性を で上書きすることはできませんMooseX::Declare
。
use MooseX::Declare;
role Person {
has 'name' => (
is => 'ro',
isa => 'Str',
default => 'John',
);
}
class Me with Person {
has '+name' => (
default => 'Michael',
);
}
コードを実行すると報告されるエラー:
Could not find an attribute by the name of 'name' to inherit from in Me at /usr/lib/perl5/Moose/Meta/Class.pm line 711
Moose::Meta::Class::_process_inherited_attribute('Moose::Meta::Class=HASH(0x2b20628)', 'name', 'default', 'Michael', 'definition_context', 'HASH(0x114fd38)') called at /usr/lib/perl5/Moose/Meta/Class.pm line 694
Moose::Meta::Class::_process_attribute('Moose::Meta::Class=HASH(0x2b20628)', '+name', 'default', 'Michael', 'definition_context', 'HASH(0x114fd38)') called at /usr/lib/perl5/Moose/Meta/Class.pm line 566
Moose::Meta::Class::add_attribute('Moose::Meta::Class=HASH(0x2b20628)', '+name', 'default', 'Michael', 'definition_context', 'HASH(0x114fd38)') called at /usr/lib/perl5/Moose.pm line 79
Moose::has('Moose::Meta::Class=HASH(0x2b20628)', '+name', 'default', 'Michael') called at /usr/lib/perl5/Moose/Exporter.pm line 370
Moose::has('+name', 'default', 'Michael') called at Test.pm line 12
main::__ANON__() called at /usr/share/perl5/MooseX/Declare/Syntax/MooseSetup.pm line 81
MooseX::Declare::Syntax::MooseSetup::__ANON__('CODE(0x2b0be20)') called at Test.pm line 21
これは機能しますが、役割に基づいていません。
class Person {
has 'name' => (
is => 'ro',
isa => 'Str',
default => 'John',
);
}
class Me extends Person {
has '+name' => (
default => 'Michael',
);
}
ロールを使用するときのコードの何が問題になっていますか? 属性の動作をオーバーライドする可能性はありませんか?