从 Moose 中的属性名称动态生成 writer/reader
Dynamically generate writer/reader from attribute names in Moose
在 Moose 中,我们可以对实例属性进行限制或添加 getters/setters,如下所示:
has 'color' => (
is => 'rw',
isa => 'Str',
writer => '_set_color',
);
我的问题是,有没有办法为元素数组动态执行此操作?可以这样做:
has ['color', 'temperature', 'size'] => (
is => 'rw',
isa => 'Str',
);
但是有没有办法为这些项目中的每一个创建自己的作者(或reader),例如_set_color
、_set_temperature
、_set_size
?我试图查看以下内容是否产生了任何见解,但它返回了一个错误
bad accessor/reader/writer/predicate/clearer format, must be a HASH
ref
has ['color', 'temperature', 'size'] => (
is => 'rw',
isa => 'Str',
writer => sub {
print Dumper(\@_);
return;
);
我希望得到的是(这不起作用):
has ['color', 'temperature', 'size'] => (
is => 'rw',
isa => 'Str',
writer => "_set_$_";
);
我需要自定义编写器,所以只使用 Moose 提供的编写器对我来说不起作用。
has
不是魔法。这只是一个子程序调用。所以像这样的东西应该可以工作(未经测试):
for (qw[colour temperature size]) {
has $_ => (
is => 'rw',
isa => 'Str',
writer => "_set_$_",
);
}
在 Moose 中,我们可以对实例属性进行限制或添加 getters/setters,如下所示:
has 'color' => (
is => 'rw',
isa => 'Str',
writer => '_set_color',
);
我的问题是,有没有办法为元素数组动态执行此操作?可以这样做:
has ['color', 'temperature', 'size'] => (
is => 'rw',
isa => 'Str',
);
但是有没有办法为这些项目中的每一个创建自己的作者(或reader),例如_set_color
、_set_temperature
、_set_size
?我试图查看以下内容是否产生了任何见解,但它返回了一个错误
bad accessor/reader/writer/predicate/clearer format, must be a HASH ref
has ['color', 'temperature', 'size'] => (
is => 'rw',
isa => 'Str',
writer => sub {
print Dumper(\@_);
return;
);
我希望得到的是(这不起作用):
has ['color', 'temperature', 'size'] => (
is => 'rw',
isa => 'Str',
writer => "_set_$_";
);
我需要自定义编写器,所以只使用 Moose 提供的编写器对我来说不起作用。
has
不是魔法。这只是一个子程序调用。所以像这样的东西应该可以工作(未经测试):
for (qw[colour temperature size]) {
has $_ => (
is => 'rw',
isa => 'Str',
writer => "_set_$_",
);
}