2012-03-04 15 views
15

Una recomendación a menudo visto en las mejores prácticas en materia de Moose es la siguiente:¿Por qué se prefiere "use namespace :: autoclean" a "no Moose"?

"El poco uso namespace::autoclean es simplemente una buena higiene de código, ya que elimina los símbolos de espacio de nombres de la clase importada al final del ciclo de compilación de su paquete, incluidas las palabras clave Moose. Una vez que la clase ha sido creada, estas palabras clave no son necesarias. (Esto es preferible a colocar no Moose al final de su paquete). "

Tomado por Moose::Manual::BestPractices (énfasis mío).

entiendo todo lo relacionado con la cita anterior, excepto por una cosa: ¿por qué es el uso de namespace::autoclean preferían el uso de no Moose al final del ámbito léxico?

¿Es sólo porque namespace::autoclean es más versátil, lo que permite más opciones en su uso, o hay algo intrínseco a la forma en que se llevó a cabo (especialmente adaptados para Moose clases, tal vez) que hace que sea más fiable?

No encontré documentación que aclare esto, y me gustaría saber la respuesta correcta.

Respuesta

16

no Moose se deshace solo de las funciones importadas por use Moose. use namespace::autoclean se deshace de todas las funciones importadas.

Si siempre usa namespace::autoclean, entonces no tiene que recordar cambiar no Moose al use namespace::autoclean si luego vuelve e importa una función de algún módulo. De lo contrario, es posible que te olvides de hacer eso.

+9

'namespace :: autoclean' también romperá su código si planea usar sobrecargas al mismo tiempo. Para ese caso, es posible que desee probar 'namespace :: sweep'. – friedo

+1

Actual 'namespace :: autoclean' (v0.28, oct 2015) documentación [estados] (http://stackoverflow.com/questions/9559064/why-is-use-namespaceautoclean-preferred-to-no-moose) que "los subs mágicos instalados por sobrecarga no se limpiarán". –

Cuestiones relacionadas