在Perl中,如果你有这样的循环:
foreach (@items) {
perform_action($_);
}
Run Code Online (Sandbox Code Playgroud)
您可以通过调用map
void上下文来替换它:
map {
perform_action($_)
} @items;
Run Code Online (Sandbox Code Playgroud)
这样做有什么优点或缺点?它是否会对性能产生影响,因为Perl认为必须保存结果?它是否会改善/恶化可读性?
Eug*_*ash 17
从void上下文中的Perl 5.8.1映射开始并不昂贵:
在void上下文中的map不再昂贵.map现在可以识别上下文,如果在void上下文中调用,则不会构造列表.
但后缀形式for
可能更具可读性:
perform_action($_) for @items;
Run Code Online (Sandbox Code Playgroud)
tch*_*ist 14
使用map
或grep
在void上下文中的问题主要是概念性的.两者都是构造,其作用是返回列表.丢弃该列表会导致混乱的代码,不清楚listops的概念.我自己从不使用虚空语境中的任何一个.
我对三元条件运算符有同样的看法.它的工作是返回一个值,因此在void上下文中使用它是没有意义的,只会让人感到困惑.
也就是说,我不会把太多的股票投入到Perl::Critic
PBP中.我想这本书的存在比它不存在更好,但是人们经常误解整个观点并最终将其用作大棒.
归档时间: |
|
查看次数: |
1184 次 |
最近记录: |