Почему «use namespace :: autoclean» предпочтительнее «no Moose»? - PullRequest
15 голосов
/ 05 марта 2012

Часто встречающаяся рекомендация в отношении лучших практик, касающихся Moose, следующая:

"Бит использования namespace::autoclean - это просто хорошая гигиена кода, так как он удаляет импортированные символы из пространства имен вашего класса в конце цикла компиляции вашего пакета, включая ключевые слова Moose. После того, как класс создан, эти ключевые слова не требуется. (это предпочтительнее, чем помещать no Moose в конце вашего пакета) . "

Снято для Moose :: Manual :: BestPractices (выделено).

Я понимаю все, что касается приведенной выше цитаты, за исключением одного: почему предпочтительнее использование namespace::autoclean вместо использования no Moose в конце лексической области?

Это просто потому, что namespace::autoclean более универсален, допускает больше возможностей при его использовании, или есть что-то присущее тому, как оно было реализовано (возможно, специально адаптированное для классов Moose), что делает его более надежным?

Я не нашел документации, разъясняющей это, и я бы очень хотел узнать правильный ответ.

1 Ответ

16 голосов
/ 05 марта 2012

no Moose избавляет только от тех функций, которые импортированы use Moose. use namespace::autoclean избавляет от всех импортированных функций.

Если вы всегда используете namespace::autoclean, вам не нужно помнить, чтобы переключить no Moose на use namespace::autoclean, если позже вы вернетесь и импортируете функцию из какого-то модуля. В противном случае вы можете забыть сделать это.

...