问题描述
在我的最后一个问题中@Borodin评论了我的问题:
In my last question @Borodin commented my question with:
您应该首先删除 Modern::Perl 和 namespace::sweep.应避免使用作为 pragma 的模块.
我有点困惑,因为:
- 在最新的Moose BestPractices 手册推荐使用
namespace::autoclean
.
- in the LATEST Moose BestPractices manual recommending to use
namespace::autoclean
.
use namespace::autoclean 位只是良好的代码卫生,因为它在结束时从类的命名空间中删除导入的符号包的编译周期,包括 Moose 关键字.一旦上课已经建好了,就不需要这些关键字了.(这是首选不要在包裹的末端放置驼鹿).
在Intermediate perl
书中也推荐使用namespace::autoclean
.
是的,我使用了 autoclean
而不是 sweep
模块 - 因为再次 来自文档
Yes, I'm used the instead of the autoclean
the sweep
module - because again from the doccu
编写此 pragma 是为了解决优秀的命名空间::自动清理.特别是,namespace::autoclean 将删除由重载安装的特殊符号,因此您不能使用namespace::autoclean 在重载 Perl 运算符的对象上.
......
在大多数情况下,namespace::sweep 应该作为替代品用于命名空间::自动清理.发布后,此 pragma 通过所有namespace::autoclean 的测试,以及它自己的测试.
In most cases, namespace::sweep should work as a drop-in replacement for namespace::autoclean. Upon release, this pragma passes all of namespace::autoclean's tests, in addition to its own.
而且因为我是一个 perl 初学者,所以我真的很困惑.对我来说,当我阅读:这个模块解决另一个模块的一些问题 - 意思是:使用这个.
And because I'm an perl beginner, i'm really confused. For me, when i reading: this module addressing some problems of another module - mean: use this one.
'手册(我应该从哪里学习)说使用它"和来自 stackoverflow teling 的专家:不要使用它.
'Manual (where from I should learn) says "use it" and expert from stackoverflow teling: don't use it.
所以请有人解释一下:
- 使用
namespace::sweep
是否正确,或者我应该使用namespace::autoclean
还是不使用它们? - 如果没有,为什么 BestPractices 推荐它?
- it is correct to use
namespace::sweep
or I should usenamespace::autoclean
or none of them? - if none, why the BestPractices recommends it?
对于`ModernPerl'.当然,我可能没有深入了解和确切地"了解它的作用.我所知道的,(再次来自 doccu)
For the `ModernPerl'. Sure, I'm probably don't understand deeply and "exactly" what is does. What i know, (again from it's doccu)
这将启用严格和警告编译指示,以及所有Perl 5.10 中可用的功能.它还支持 C3 方法解析按照 perldoc mro 中记录的顺序并加载 IO::File 和 IO::Handle以便您可以调用文件句柄上的方法.未来,它可能包括额外的核心模块和编译指示.
当然,不深入了解mro
,只认为它是多重继承情况下死亡钻石"问题的答案.
Sure, don't deeply understand to mro
, only think it is an answer to the "deadly diamond of death" problem in cases of multiple inheritance.
直到今天,我对它真的很满意,因为它对我来说缺少所需的编译指示:
Up to today, i was really happy with it, because it is shorting for me the needed pragmas:
use strict;
use warnings;
use feature 'say';
那么,Modern::Perl"(以及其他类似的 cpanm 模块)的状态"是什么?是否允许使用?
So, what is a "status" of the "Modern::Perl" (and other similar cpanm modules)? Allowed to use, or not?
推荐答案
关于namespace::sweep的问题:
On your question about namespace::sweep:
首先,注意namespace::sweep 解决的实际问题.
Firstly, take note of the actual problem that namespace::sweep resolves.
特别是,namespace::autoclean 将删除由重载安装的特殊符号,因此您不能在重载 Perl 运算符的对象上使用 namespace::autoclean.
这意味着如果您的类具有重载运算符,如果您还使用 namespace::autoclean
,它们将无法工作.但是这个问题只有在你使用重载
时才会出现.除此之外,namespace::autoclean 就足够了.
What this means is that if your class has overloaded operators they won't work if you also use namespace::autoclean
. But this problem only occurs if you use overload
. Other than that, namespace::autoclean will suffice.
其次,它说可以使用 namespace::sweep 代替 namespace::autoclean:
Secondly, it says that namespace::sweep can be used instead of namespace::autoclean:
在大多数情况下,namespace::sweep 应该作为 namespace::autoclean 的直接替代品.发布时,此 pragma 除了自己的测试外,还通过了 namespace::autoclean 的所有测试.
所以要回答你的问题,使用 namespace::sweep 还是我应该使用 namespace::autoclean 或都不使用它们是正确的吗?"
So to answer your question, "is it correct to use namespace::sweep or I should use namespace::autoclean or none of them?"
- 您应该至少使用 Moose Best Practices 推荐的其中一种.
- 使用 namespace::sweep 通常是可以的,因为它说它旨在这样做并且它通过了所有 namespace::autoclean 的测试.
- 尽管有上述第 2 点,如果您不
使用重载
,那么使用 namespace::autoclean 就没有问题,因此您可以在这种情况下使用它.
- You should use at least one of them as recommended by Moose Best Practices.
- It is generally ok to use namespace::sweep since it says it is designed to do so and it passes all of namespace::autoclean's tests.
- In spite of point 2 above, if you don't
use overload
then you don't have a problem with using namespace::autoclean, so you could just use that in this case.
这篇关于使用或不使用 namespace::sweep 和/或 Modern::Perl的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!