Moose::Manual::Attributes Zustände:Warum nimmt Moose's Builder einen String-Wert?
Als Alternative einer Subroutinenreferenz [für Standard] zu verwenden, können Sie stattdessen eine Builder Methode für Ihr Attribut übergeben: ... Dies hat mehrere Vorteile. Erstens verschiebt es einen Teil des Codes in seine eigene benannte Methode, was die Lesbarkeit und Code-Organisation verbessert.
So könnte das Attribut einen Standard thusly definieren:
has attr => (
is => 'ro',
builder => 'subroutine'
);
sub subroutine {
# figure out and return default value
}
ich nicht, warum dies von Standard getrennt sein muss. Könnten Sie nicht einfach einen Verweis auf eine benannte Subroutine übergeben?
has attr => (
is => 'ro',
default => \&subroutine
);
Und wäre das nicht besser Programmierpraxis sein, da Sie nicht versehentlich garantiert sind, zu einem Unterprogramm zu beziehen, die gar nicht existieren? Sie würden sich auf die Methode mit einer logischen Referenz anstelle einer symbolischen Referenz beziehen.
Nun, ich weiß, es ist keine Referenz im Perl-Sinne; Ich dachte nur, eine bessere Programmierung wäre es, aus den genannten Gründen einen echten Hinweis auf eine benannte Subroutine zu geben. Sie haben jedoch Recht; Der Rest des Handbuchs zeigt, warum es so ist, wie es ist ... – skiphoppy
Beachten Sie den Absatz, der beginnt "Dies hat mehrere Vorteile. Erstens ..."; vielleicht würde es helfen, etwas von dem nächsten Abschnitt nach oben zu verschieben, damit der Absatz mehr als nur diesen einen Vorteil gibt, ein wenig früher für diejenigen, die sich wundern. – skiphoppy