2017-07-25 73 views
2

属性名在穆斯写入/读取器,我们可以把例如限制属性或添加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_$_"; 
); 

我需要自定义的作家,所以只是去通过穆斯提供的那些不FO工作我。

回答

4

has并不神奇。这只是一个子程序调用。所以像这样的东西应该工作(未经测试):

for (qw[colour temperature size]) { 
    has $_ => (
    is  => 'rw', 
    isa => 'Str', 
    writer => "_set_$_", 
); 
}