加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:53:24 所属栏目:大数据 来源:网络整理
导读:可能的方法: 使用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,('ba
可能的方法:

>使用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并发现它不能令人信服.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读