当前位置:  开发笔记 > 编程语言 > 正文

简洁的foreach表达式在一行中

如何解决《简洁的foreach表达式在一行中》经验,为你挑选了4个好方法。

在Perl中,人们通常可以避免使用控制块,如下所示:

print "$_\n" foreach(@files);

代替:

foreach(@files){
  print "$_\n";
}

该语法如何在以下更复杂的情况下工作:

die("Not a file: $_") unless -f $_ foreach(@files);

它给我一个语法错误.我不是要编写混淆代码,它只是程序中不重要的部分,所以我想尽可能简洁地表达它.

概括的答案:

我只接受一个答案作为接受的答案,但我最喜欢克里斯和乔恩的以下答案.

这个foreach按照我的意图使用,但没有syntax error:

-f or die "Not a file: $_" foreach @files;

以下一个至少同样好.我喜欢这die是在声明的开头,因为这是读者应该注意的:

die("Not a file: $_") for grep {!-f} @files;

Chris Lutz.. 13

只是要Perlish(TMTOWTDI)你可以使用逻辑短路:

-f or die "Not a file: $_" foreach @files;

在OS X上测试并且有效.

作为旁注,-f or die看起来像open() or die我在Perl中看到的许多常见结构,并且仍然(认为)显示了该行的意图(die在某些条件下).



1> Chris Lutz..:

只是要Perlish(TMTOWTDI)你可以使用逻辑短路:

-f or die "Not a file: $_" foreach @files;

在OS X上测试并且有效.

作为旁注,-f or die看起来像open() or die我在Perl中看到的许多常见结构,并且仍然(认为)显示了该行的意图(die在某些条件下).



2> Adam Bellair..:

您可以使用@ Brent.Longborough的答案,或者如果您真的想要postfix,请执行以下操作:

do { die("Not a file: $_") unless -f $_ } foreach(@files);

但是,我同意其他人,只是因为这是"一个不重要的部分"并不意味着简洁更好. 可读性很重要.



3> Chad Birch..:

好吧,你可能不打算写出混淆代码,但我会说你肯定会尝试.

两条线(或者甚至是一条线上的一块,就像Brent.Longborough所暗示的那样)而不是一条线那么糟糕吗?老实说,这就是我一般不喜欢尝试调试/编辑其他人的perl代码的原因,大量用perl编写的人似乎都沉迷于以最"聪明"的方式做几乎所有事情,而不是去做以一种易于理解的方式阅读其他人.



4> Jon Ericson..:

如果错误测试是此代码的主要部分,那么将它放在行的开头可能是有意义的.使用时略有改进grep:

die("Not a file: $_") for grep {!-f} @files;

但是如果你计划在代码的那一部分出于某些其他原因循环遍历文件,那么最好将它添加到循环体中.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有