2017-07-25 45 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_$_", 
); 
}