perl – 有条件地在列表中包含元素的最佳方法是什么?
可能的方法:
>使用push: my @list; push @list,'foo' if $foo; push @list,'bar' if $bar; >使用conditional operator: my @list = ( $foo ? 'foo' : (),$bar ? 'bar' : (),); >使用 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并发现它不能令人信服. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |