2017-07-25 2 views
2

In Moosen erzeugen können wir Beschränkungen Instanz setzen Attribute oder wie so Getter/Setter hinzufügen:Dynamisch Schreib-/Lesegerät von Attributnamen in Moosen

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

Meine Frage ist, gibt es eine Möglichkeit, diese dynamisch zu tun für eine Reihe von Elementen? Es ist möglich, so etwas zu tun:

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

Aber ist es eine Möglichkeit, für jedes dieser Elemente einen eigenen Schriftsteller (oder Leser), zum Beispiel zu erstellen _set_color, _set_temperature, _set_size? Ich habe versucht zu sehen, ob eine der folgenden Aktionen Einsicht ergab, aber es hat einen Fehler zurückgegeben

schlecht Accessor/Leser/Schreiber/Prädikat/klares Format muss ein HASH seine ref

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

Was ich hoffe, zu bekommen, ist so etwas wie (was nicht funktioniert):

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

ich brauche individuelle Autoren, also nur für die von Moose bereitgestellt diejenigen gehen fo nicht funktioniert r ich.

Antwort

4

has ist nicht magisch. Es ist nur ein Unterprogrammaufruf. Also sollte so etwas funktionieren (ungetestet):

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