Ich habe zwei Objektattribute, die teure Berechnungen erfordern, also möchte ich, dass sie faul sind. Sie werden am effizientesten zusammen berechnet, daher möchte ich sie zur gleichen Zeit berechnen. Bietet Moose eine Möglichkeit, dies zu tun?In Moose, wie setze ich mehrere Standardwerte mit einem Methodenaufruf?
Was ich möchte, ist etwas wie "Standard" oder "Builder", aber anstatt den Standardwert zurückgibt setzt es direkt Attribute. Der Rückgabewert würde ignoriert werden.
has max_things =>
is => 'rw',
isa => 'Int',
lazy => 1,
xxxxx => '_set_maxes';
has max_pairs =>
is => 'rw',
isa => 'Int',
lazy => 1,
xxxxx => '_set_maxes';
# Let's just assume this is an expensive calculation or the max_*
# attributes are used rarely and a lot of objects are created.
sub _set_maxes {
my $self = shift;
if($self->is_32_bit) {
$self->max_things(2**31);
$self->max_pairs(12345 * 2);
}
else {
$self->max_thing(2**63);
$self->max_pairs(23456 * 2);
}
return;
}
HINWEIS: Ich konnte meine eigenen ‚Leser‘ oder verwenden Sie ‚um‘ schreiben, aber ich würde lieber halten es deklarative und lassen Moose die Arbeit machen. Ich könnte auch ein neues Objekt erstellen, nur um die gepaarten Werte zu speichern, aber es scheint für zwei Werte übertrieben zu sein.
vermeiden Sie rufen '_build_both_maxes' zweimal durch das Ergebnis des Caching in' $ self -> _ both_maxes'. Eine clevere Arbeit. Die doppelte Erinnerung passt nicht gut zu mir, und dieses falsche Attribut wird dem nächsten Betreuer rätselhaft sein. – Schwern
@Swwern Ja, ich bin auch nicht verliebt, aber es ist die beste Lösung, die ich kenne. Hoffentlich kommen einige konkurrierende Antworten dazu. – AKHolland