2011-04-13 6 views
6

Estoy repasando las recetas Moose y todavía no puedo ver si puedo crear variables privadas y funciones usándolas? ¿Es posible? Si es así, ¿cómo crearlos con Moose?¿Cómo se pueden crear variables y funciones privadas/públicas usando Moose?

+2

Usted puede echar un vistazo a MooseX :: privacidad si se quiere, que es una extensión para lograr esto. Sin embargo, los métodos privados no son verdaderamente privados, ya que morirán en lugar de ser salteados en el despacho. –

+0

Perl no es Java. – Ether

Respuesta

10

Como daxim señala, los métodos privados tienen el prefijo "_". Debido atributos (variables de instancia) generan métodos getters (y si rw también emisores de métodos) fuera de la caja, usted debe hacer esto:

has 'myvariable' => (
    is  => 'ro', 
    writer => '_myvariable', 
    init_arg => undef, 
    # other options here 
); 

esta manera se puede establecer este atributo dentro de su clase/instancia y no es ajustable desde afuera. Si acceso de sólo lectura es demasiado, también se puede marcarlo "privado":

has '_myvariable' => (
    is  => 'ro', 
    writer => '_set_myvariable' 
    init_arg => undef, 
    # other options here 
); 
10

Prefija un identificador con un _ para marcar la función/variable etc. como privada. Esto está documentado en perlstyle en la sección sobre alcance, aproximadamente en la mitad del documento.

Esto es respetado por los programadores y algunas herramientas (analizadores fuente/documentación), pero no aplicadas por el compilador. Ver perlmodlib#NOTE.

Cuestiones relacionadas