2012-03-04 59 views
15

的上关于Moose最佳实践经常看到的建议如下:为什么“use namespace :: autoclean”首选为“no Moose”?

“使用namespace::autoclean位就是良好的代码卫生,因为它消除了在你的包的编译周期结束进口从你的类的命名空间的符号,包括Moose关键字,一旦建立了类,这些关键字就不需要了。(这是将no Moose放置在包的末尾的优选方案)

采取Moose::Manual::BestPractices(强调我的)。

我明白了上面关于报价的一切,除了一两件事:为什么是利用namespace::autoclean在词法范围的结束首选使用no Moose

仅仅是因为namespace::autoclean更通用,允许使用更多选项,或者是否存在实现方式的内在特性(可能专门为Moose类定制),使其更加可靠?

我发现没有文件澄清这一点,我很想知道正确的答案。

回答

16

no Moose摆脱了由use Moose导入的那些功能。 use namespace::autoclean摆脱所有导入的功能。

如果您总是使用namespace::autoclean,那么您不必记得将no Moose切换为use namespace::autoclean,如果您稍后返回并从某个模块导入功能。否则,你可能会忘记这么做。

+9

'namespace :: autoclean'也会打破你的代码,如果你打算同时使用重载。对于这种情况,你可能想尝试'namespace :: sweep'。 – friedo 2012-03-05 00:56:17

+1

当前'namespace :: autoclean'(v0.28,2015年10月)文档[states](http://stackoverflow.com/questions/9559064/why-is-use-namespaceautoclean-preferred-to-no-moose) “超载安装的魔术师将无法清理”。 – 2016-05-24 04:05:52

相关问题