perl – 有条件地在列表中包含元素的最佳方法是什么?

前端之家收集整理的这篇文章主要介绍了perl – 有条件地在列表中包含元素的最佳方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
可能的方法

>使用push

my @list;  
push @list,'foo' if $foo;  
push @list,'bar' if $bar;

>使用conditional operator

my @list = (  
    $foo ? 'foo' : (),$bar ? 'bar' : (),);

>使用x!! Boolean list squash operator

my @list = (  
    ('foo') x!! $foo,('bar') x!! $bar,);

哪一个更好,为什么?

解决方法

嗯,他们都做不同的事情.

但是,所有其他因素都相同,

push @list,'foo' if $foo;

是最直接传达其含义的陈述,因此应该是首选.

如果你必须暂停并思考那些应该像推送数组元素一样简单的语句,那么你做错了什么.

my @list = (
    $foo ? 'foo' : (),);

如果这是其他地方正在进行的一些巨大初始化的一部分,那就可以了.

我觉得用

my @list = (
    ('foo') x!! $foo,);

表示程序员有 – 我可以把它? – issues.

顺便说一句,没有这样的东西叫x !!复合运算符. !!它将一个任意的false值转换为一个已定义但值为false的值(空字符串),当perl需要一个数字时,它会产生0.真值转换为1.这里,!!在$foo和$bar上运行并编写x !! $foo不必要地混淆了代码的含义.

x是repetition operator.所以,

('foo') x !!$foo;

意味着重复(‘foo’)一次或根本不重复,具体取决于$foo是真还是假.

PS:当然,事实证明有一个PerlMonks article引入了所谓的布尔列表压缩运算符.我读了article并发现它不能令人信服.

原文链接:https://www.f2er.com/Perl/172045.html

猜你在找的Perl相关文章