2017-07-25 6 views
2

で属性名からライター/リーダーを生成します。私の質問がある動的に我々は、インスタンス上の制約属性を置くかそこらのようなゲッター/セッターを追加することができムースでムース

has 'color' => (
    is => 'rw', 
    isa => 'Str', 
    writer => '_set_color', 
); 

をするために動的にこれを行う方法があります要素の配列?例えば、

has ['color', 'temperature', 'size'] => (
    is => 'rw', 
    isa => 'Str', 
); 

しかし、これらの項目ごとに独自のライター(またはリーダー)を作成する方法があります:それはこのような何かをすることが可能です_set_color,_set_temperature,_set_size

has ['color', 'temperature', 'size'] => (
    is => 'rw', 
    isa => 'Str', 
    writer => sub { 
    print Dumper(\@_); 
    return; 
); 

何HASHでなければならない REF、私は次のように任意の洞察力をもたらしたかどうかを確認しようとしたが、それは

悪いアクセサ/リーダー/ライター/述語/明確なフォーマットエラーを返しました

has ['color', 'temperature', 'size'] => (
    is => 'rw', 
    isa => 'Str', 
    writer => "_set_$_"; 
); 

が、私はこれだけfoは動作しませんムースが提供するもののために行く、カスタムのライターが必要になります。私のようなもの(動作しない)で取得するために期待していますr私。

答えて

4

hasは魔法ではありません。これは単なるサブルーチンコールです。したがって、このようなものは動作しません(テストされていない):

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