2012-03-04 15 views
15

Często postrzegane zalecenie w sprawie najlepszych praktyk w zakresie Moose jest następujący:Dlaczego "use namespace :: autoclean" jest preferowane zamiast "no Moose"?

„Wykorzystanie namespace::autoclean bit jest po prostu dobra higiena kod, gdyż usuwa importowane symbole z nazw klasie na koniec cyklu kompilacji Twojego pakietu, w tym słowa kluczowe: Moose. Po utworzeniu klasy te słowa kluczowe nie są potrzebne: (Preferowane jest umieszczanie no Moose na końcu paczki). "

Zrobiono dla Moose::Manual::BestPractices (podkreślenie moje).

wszystko rozumiem dotyczące cytat powyżej, z wyjątkiem jednej rzeczy: dlaczego jest stosowanie namespace::autoclean preferowane do użycia no Moose na końcu zakresu leksykalnego?

Czy to tylko dlatego namespace::autoclean jest bardziej wszechstronny, pozwalając na więcej opcji w jego wykorzystania, czy jest tam coś nieodłącznym drodze został wdrożony (specjalnie dostosowane do Moose zajęć, być może), który sprawia, że ​​jest bardziej wiarygodne?

Nie znalazłem żadnej dokumentacji, która by to wyjaśniła i chciałbym poznać właściwą odpowiedź.

Odpowiedz

16

no Moose pozbywa się tylko tych funkcji zaimportowanych przez use Moose. use namespace::autoclean pozbywa się wszystkich importowanych funkcji.

Jeśli zawsze używasz namespace::autoclean, nie musisz pamiętać, aby przełączyć no Moose na use namespace::autoclean, jeśli później wrócisz i zaimportujesz funkcję z jakiegoś modułu. W przeciwnym razie możesz o tym zapomnieć.

+9

'namespace :: autoclean' złamie również twój kod, jeśli planujesz używać przeciążenia w tym samym czasie. W takim przypadku możesz wypróbować 'namespace :: sweep'. – friedo

+1

Bieżąca "namespace :: autoclean' (v0.28, paź 2015) documentation [states] (http://stackoverflow.com/questions/9559064/why-is-use-namespaceautoclean-preferred-to-no-moose), która "magiczne głośniki zainstalowane przez przeciążenie nie zostaną wyczyszczone". –