Moose::Manual::Attributes estados:¿Por qué el constructor de Moose toma un valor de cadena?
Como alternativa al uso de una referencia subrutina [por defecto], en su lugar puede suministrar un método constructor para su atributo: ... Esto tiene varias ventajas. En primer lugar, mueve un trozo de código a su propio método con nombre, lo que mejora la legibilidad y la organización del código.
lo tanto, su atributo podría definir un valor predeterminado de esta manera:
has attr => (
is => 'ro',
builder => 'subroutine'
);
sub subroutine {
# figure out and return default value
}
No entiendo por qué esto tiene que ser separado de forma predeterminada. ¿No podría simplemente pasar una referencia a una subrutina con nombre?
has attr => (
is => 'ro',
default => \&subroutine
);
Y ¿no sería mejor práctica de programación, ya que tiene la garantía de no hacer referencia accidentalmente a una subrutina que no existe? Se estaría refiriendo al método con una referencia lógica en lugar de una referencia simbólica.
Bueno, sé que no es una referencia en el sentido de Perl; Estaba pensando que una mejor práctica de programación sería pasar una referencia real a una subrutina con nombre, por las razones que mencioné. Sin embargo, tienes razón; el resto del manual muestra por qué es deseable ... – skiphoppy
Tenga en cuenta el párrafo que comienza "Esto tiene varias ventajas. Primero ..."; tal vez ayudaría mover parte de la siguiente sección hasta allí para dar seguimiento, de modo que el párrafo brinde más que solo esa ventaja, un poco antes para aquellos que se lo estén preguntando. – skiphoppy