2011-03-02 8 views
5

Estoy usando objetos Moose, pero necesito declarar miembros estáticos para cosas que se realizarán una sola vez y que no están relacionadas con objetos.¿Cómo puedo declarar/usar miembros estáticos en Moose?

¿Tiene alguna idea o ejemplos?

Gracias

Dotan.

+1

sólo tiene que utilizar una variable de paquete sencillo como lo haría en la vainilla Perl. –

Respuesta

6

Puede utilizar MooseX::ClassAttribute:

package SomeClass; 
use Moose; 
use MooseX::ClassAttribute; 

class_has 'static_member' => (is => 'rw'); 

El miembro está utilizando accesos SomeClass->static_member.

2

He intentado jugar con MooseX :: ClassAttribute como sugirió BVR, pero terminó sólo la creación de ellos como de sólo lectura miembros con un defecto:

has 'static_thing' => (is => 'ro', init_arg => undef, default => 42); 

Parece más sencillo.

+1

Para cualquier cosa que no consuma mucha memoria, o donde está bien tener varias copias de la misma cosa, está bien, pero a veces solo necesita una copia de lo mismo (digamos un manejador de base de datos) para ser compartido en todos los objetos, que es donde un atributo de clase puede ser de utilidad. – Ether

+0

Lo usé en uno o dos lugares hasta ahora, por lo general para algo que necesita ser compartido entre los miembros de la clase (como dijo Ether). – bvr

+0

También tenga en cuenta que necesitaría una instancia para acceder al atributo no estático. Obtener una instancia no siempre es conveniente. –

2

debajo de toda la cervino-dad todavía hay Plain Old Perl

por lo que sólo establece una variable en el archivo de clase .pm

package SomeClass; 
use Moose; 

my $instance_counter = 0; 

around BUILDARGS => sub { 
    $instance_counter += 1; 
} 

. . . 
Cuestiones relacionadas