后路
MooseX :: Declare不再依赖任何人,因为它依赖于Devel :: Declare达到了目的,但它本身已经过时了。此时,如果有人想要MX :: D,则应查看Moops
原版的
假定我已经对老式Perl OO有相当的了解,并假设我将以某种Moose的风格编写一些新代码(是的,我知道会有性能方面的问题),我想知道是否深入其中的任何一个兔子洞,我是否希望我选择了其他途径?您可以通过Moose
与MooseX::Declare
(或其他一些)的相对优点来启发我吗?同样,如果我选择切换它们,它们是如何互换的,一个用于一个类,另一个用于另一类。
(ps。我可以很好地回答这个问题,但是我认为格式正确的答案可能能够避免主观性)
最佳答案
MooseX :: Declare基本上是Moose上语法的糖层。对于解析器之外的所有内容,它们的产生结果都是相同的。 MooseX :: Declare可以产生更多的内容,而编写的内容则更少。
作为喜欢MooseX :: Declare语法但仍然更喜欢用纯Moose编写我的所有代码的人来说,权衡主要是在开发和可维护性方面。
比较时注意事项的基本列表:
MooseX :: Declare具有更简洁的语法。在普通的旧Perl对象(POPO?)中需要数百行的事情,在Moose中可能需要50行,在MooseX :: Declare中可能需要30行。 MooseX :: Declare的代码对我来说也更具可读性和优雅性。
MooseX :: Declare表示您免费拥有MooseX :: Types和MooseX :: Method :: Signatures。这导致了非常优雅的method foo(Bar $bar, Baz $baz) { ... }
语法,该语法使人们在使用Ruby几年后又回到了Perl。
MooseX :: Declare的缺点是,某些错误消息比Moose更加隐秘。 TypeConstraint验证失败的错误可能发生在MooseX :: Types :: Structured的几层深处,并从那里到达您破坏代码的位置,这对于系统新手来说可能很难。驼鹿也有这个问题,但是程度较小。
龙在MooseX :: Declare中所隐藏的位置与其在Moose中所隐藏的位置可以有细微的不同。 MooseX :: Declare努力解决已知的Moose问题(例如with()
的时间),但引入了一些新的地方要注意。例如,MooseX :: Types与Moose的本机Stringy类型[^ 1]有着完全不同的问题集。
MooseX :: Declare又有另一个性能上的优势。 MooseX :: Declare开发人员和开发人员都知道这一点(我相信有几种工作价值)。
MooseX :: Declare向Moose添加更多依赖项。我添加这一点是因为人们已经抱怨过Moose的依赖项列表,该依赖项列表大约有20个模块。 MooseX :: Declare在此之上添加了另外5个直接依赖项。但是,根据http://deps.cpantesters.org/的总列表为Moose 27,MooseX :: Declare 91。
如果您愿意使用MooseX :: Declare,最好的部分是您可以在每个班级级别之间进行交换。您无需在项目中挑选一个。如果由于性能需求而在Moose中使此类更好,或者是由初级程序员维护的,或者是安装在受更严格控制的系统上的。你可以做到的。如果该类可以从MooseX :: Declare语法的额外清晰度中受益,那么您也可以这样做。
希望这有助于回答问题。
[^ 1]:有人说更少,有人说更多。老实说,Moose核心开发人员仍在争论这一问题,并且没有正确的答案。
关于perl - Moose与MooseX::Declare,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5965953/