繁体   English   中英

在Perl中,在void上下文中使用map而不是foreach循环是否合适?

[英]In Perl, is it appropriate to use map in void context instead of a foreach loop?

在Perl中,如果你有这样的循环:

foreach (@items) {
    perform_action($_);
}

您可以在void上下文中调用map来替换它:

map {
    perform_action($_)
} @items;

这样做有什么优点或缺点? 它是否会对性能产生影响,因为Perl认为必须保存结果? 它是否会改善/恶化可读性?

从void上下文中的Perl 5.8.1映射开始并不昂贵:

在void上下文中的map不再昂贵。 map现在可以识别上下文,如果在void上下文中调用,则不会构造列表。

for的postfix形式可能更具可读性:

perform_action($_) for @items;

在void上下文中使用mapgrep的问题主要是概念性的。 两者都是构造,其作用是返回列表。 丢弃该列表会导致混乱的代码,不清楚listops的概念。 我自己从不使用虚空语境中的任何一个。

我对三元条件运算符有同样的看法。 它的工作是返回一个值,因此在void上下文中使用它是没有意义的,只会让人感到困惑。

也就是说,我不会在Perl::Critic甚至是PBP中投入过多的股票。 我想这本书的存在比它不存在更好,但是人们经常误解整个观点并最终将其用作大棒。

我相信'Perl Best Practices'会建议在foreach循环中使用显式变量作为​​最佳样式 - 这当然是我使用的。

foreach my $item (@items)
{
    perform_action($item);
}

滥用map (或grep )是在void上下文中使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM