簡體   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