2010-10-22 6 views
8

Según el Moose mejores prácticas doc, mis clases de los alces deben tener este aspecto:¿Todas mis clases de Moose deben contener 'namespace :: autoclean' y 'make_immutable' o hay alguna forma de obtenerlas de manera predeterminada?

package Person; 

use Moose; 
use namespace::autoclean; 

# extends, roles, attributes, etc. 

# methods 

__PACKAGE__->meta->make_immutable; 

1; 

Ver Moose::Manual::BestPractices.

Y el 99% de las veces esto es lo que quiero, ¿hay alguna forma de que mi espacio de nombres se elimine automáticamente y mis clases sean inmutables por defecto, así no tengo que tener este código desordenado?

¿Tal vez hay una razón técnica por la que no es posible o por qué no se debe hacer?

Gracias

Respuesta

8

Creo que la única Una forma de evitar esto es utilizar MooseX::Declare.

MooseX::Declare es una macro que convierte a continuación en el ejemplo:

use MooseX::Declare; 

class Person { 

    # attributes 

    # methods 
} 

Se inserta automáticamente namespace::autoclean y hace que la clase inmutable.

Para extender las clases que haces:

class Person extends Human { ... } 

Y para agregar roles de haces:

class Person with BlueEyeRole { ... } 

Y se puede combinar fácilmente estas:

class Person extends Human with BlueEyeRole { ... } 

También puede obtener alguna otra palabras clave definidas, por ej. method:

class Person { 
    has 'name' => (is => 'rw', isa => 'Str'); 

    method hello { "Hello " . $self->name } 
} 

Si se quería hacer su clase mutable entonces su:

class Person is mutable { ... } 


Tal vez hay una razón técnica por la cual no es posible o por qué no debería hacerse?

Técnicamente, sería difícil reunir todo esto. MooseX::Declare hace uso de Devel::Declare para compilar la sintaxis necesaria para que Perl interprete.

Así que si la placa de la caldera es un problema para usted, entonces considere usar MooseX::Declare. Lo he usado en muchos proyectos sin problemas y lo encuentro ideal para dibujar rápidamente una aplicación basada en clases. Sin embargo, la mayoría de las veces estoy contento con el texto estándar y sigo con el estándar Moose.

+0

¿Por qué votar abajo? – draegtun

+1

Porque está mal. MX :: D de ninguna manera es la única forma de lograr esto. – rafl

+1

@rafl: Dije que era la única forma que sabía.Así que no creo que merezca un voto negativo :( – draegtun

Cuestiones relacionadas