[英]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上下文中使用map
或grep
的問題主要是概念性的。 兩者都是構造,其作用是返回列表。 丟棄該列表會導致混亂的代碼,不清楚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.