2012-03-04 9 views
15

Una raccomandazione spesso visto sulle migliori pratiche per quanto riguarda Moose è la seguente:Perché "use namespace :: autoclean" è preferibile a "no Moose"?

"Il bit di uso namespace::autoclean è semplicemente una buona igiene del codice, in quanto elimina i simboli dal namespace del vostro classe importata alla fine del ciclo di compilazione del pacchetto, incluse le parole chiave Moose. Una volta che la classe è stata creata, queste parole chiave non sono necessarie (È preferibile posizionare no Moose alla fine del pacchetto). "

Preso per Moose::Manual::BestPractices (enfasi il mio).

Capisco tutto ciò che riguarda la citazione di cui sopra, tranne una cosa: perché è l'uso di namespace::autoclean preferito per l'utilizzo del no Moose alla fine del campo di applicazione lessicale?

È solo perché namespace::autoclean è più versatile, consentendo più opzioni nel suo utilizzo, o c'è qualcosa di intrinseco al modo in cui è stato implementato (su misura per le classi Moose, forse) che lo rende più affidabile?

Non ho trovato alcuna documentazione che chiarisca questo, e mi piacerebbe molto sapere la risposta giusta.

risposta

16

no Moose elimina solo le funzioni importate da use Moose. use namespace::autoclean elimina tutte le funzioni importate.

Se si utilizza sempre namespace::autoclean, non è necessario ricordare di passare da no Moose a use namespace::autoclean se in seguito si torna indietro e si importa una funzione da qualche modulo. Altrimenti potresti dimenticarti di farlo.

+9

'namespace :: autoclean' interromperà anche il codice se si prevede di utilizzare sovraccarichi allo stesso tempo. In tal caso, potresti provare 'namespace :: sweep'. – friedo

+1

Current 'namespace :: autoclean' (v0.28, ott 2015) documentation [states] (http://stackoverflow.com/questions/9559064/why-is-use-namespaceautoclean-preferred-to-no-moose) che "i sottosistemi magici installati dal sovraccarico non verranno puliti". –

Problemi correlati