在Moose中,我们可以对实例属性进行限制或添加getter / setter,如下所示:
has 'color' => (
is => 'rw',
isa => 'Str',
writer => '_set_color',
);
我的问题是,有没有办法动态地为元素数组做这个?可以做这样的事情:
has ['color', 'temperature', 'size'] => (
is => 'rw',
isa => 'Str',
);
但是有没有办法为每个项目创建自己的作者(或读者),例如_set_color
,_set_temperature
,_set_size
?我试着看看以下是否产生了任何见解,但它返回了一个错误
糟糕的访问者/读者/作者/谓词/更清晰的格式,必须是HASH 参考
has ['color', 'temperature', 'size'] => (
is => 'rw',
isa => 'Str',
writer => sub {
print Dumper(\@_);
return;
);
我希望获得的是(它不起作用):
has ['color', 'temperature', 'size'] => (
is => 'rw',
isa => 'Str',
writer => "_set_$_";
);
我需要自定义编写器,所以只选择Moose提供的编写器对我不起作用。
答案 0 :(得分:4)
has
不是魔法。它只是一个子程序调用。所以这样的事情应该有效(未经测试):
for (qw[colour temperature size]) {
has $_ => (
is => 'rw',
isa => 'Str',
writer => "_set_$_",
);
}