Pau*_*ce. 2 sorting perl perl-critic
在Perl中,我可以这样做:
my @unit_indices = sort {
$units{$b}[0] <=> $units{$a}[0]
or
$a cmp $b
} keys %units;
Run Code Online (Sandbox Code Playgroud)
哪个按字段(数组元素)降序排序,另一个(散列键)按升序排序,但会导致perlcritic抱怨:
禁止在第X行第Y列的排序块$ a之前的$ b.参见PBP的第152页.(严重程度:1)
Perl Best Practices建议使用reverse.
但如果你写的话,操作会更容易理解:
@sorted_results = reverse sort @unsorted_results;
但是,我还没有找到一种让方向相反的子方法.
显然,我可以说perlcritic要忽略这一点,但我想知道如何完成我需要的事情并使之perlcritic快乐.
Perl ::批评者有时更关心的是准确复制PBP而不是提出良好的政策,而且一些Perl最佳实践并没有很好地老化.例如,现在可悲的过时Miscellanea :: RequireRcsKeywords默认仍然打开.
Perl :: Critic的政策不应被视为佳能.他们缺乏进行主观分析的能力来决定"修复"是否实际上会增加复杂性,特别是当严重程度下降并且收益变得更窄和更窄时. BuiltinFunctions :: ProhibitReverseSortBlock是一个"整容"级别的政策,完全属于这一类.
虽然有人可能会跳过$b cmp $a并向后阅读它,但是一旦正确看待并不难理解,不值得在之后反转整个数组的开销,并且肯定不值得扭曲你的排序块以匹配策略分析的局限性.他们决定不改变默认行为以将策略限制为简单排序块是IMO不正确的.您的排序块显然超出了书面策略的范围,只是因为Perl :: Critic的策略实现有限而触发.
仅仅因为Perl :: Critic在默认情况下有一个政策并不意味着它们代表了良好的实践,也不应该盲目地遵循它们.随意配置它符合您项目的品味,以最挑剔的级别运行Perl :: Critic需要它.为了防止使perlcritic成为一种习惯性的东西,我建议更倾向于在整个项目范围内制定政策决策,.perlcritic逐个逐行地将它们逐个关闭.
请记住,重点不在于perlcritic快乐,重点是编写更好的代码.
| 归档时间: |
|
| 查看次数: |
294 次 |
| 最近记录: |