2012-03-04 1 views
15

アンMooseに関するベストプラクティスにしばしば見勧告は以下の通りです:"use namespace :: autoclean"を "ムース無し"にするのはなぜですか?

それはあなたのパッケージのコンパイルサイクルの終わりに、あなたのクラスの名前空間からインポートされたシンボルを削除して「使用namespace::autocleanビットは、単に良いコード衛生です(これはパッケージの最後にno Mooseを置くのが好ましいです) "というように、キーワードは含まれていません。

取られたMoose::Manual::BestPractices(emphasis mine)。

私は上記の引用についてはすべてを理解では、一つのことを除い:なぜnamespace::autocleanの使用はレキシカルスコープの終わりにno Mooseの使用に好まれますか?

namespace::autocleanはより汎用性があり、より多くのオプションを使用できるようになっているか、実装された本質的なものがあります(具体的にはMooseクラス用に調整されています)。

これを明確にするドキュメントは見つかりませんでした。正解を知りたいと思います。

答えて

16

no Mooseは、use Mooseでインポートされた関数のみを削除します。 use namespace::autocleanはインポートされたすべての関数を取り除きます。

いつもnamespace::autocleanを使用している場合は、あとで戻って一部のモジュールから関数をインポートする場合はno Mooseuse namespace::autocleanに切り替えるのを忘れないでください。それ以外の場合は、そのことを忘れる可能性があります。

+9

あなたが同時に過負荷を使うことを計画しているなら、 'namespace :: autoclean'もコードを壊します。その場合は、 'namespace :: sweep'を試してみてください。 – friedo

+1

現在の 'namespace :: autoclean'(v0.28、Oct 2015)のドキュメント[states](http://stackoverflow.com/questions/9559064/why-is-use-namespaceautoclean-preferred-to-no-moose) "過負荷によってインストールされたマジックサブシステムはクリーニングされません"。 –

関連する問題