是否有一条语句执行简单的T/F或0/1逻辑连接操作,返回布尔型T/F或0或1的二进制或整数表示作为独占输出?
&&
和and
操作符,而不是返回T/F (布尔值)或0/1 (二进制),而是返回作为第二个参数提供的任何值给操作符,假设两个参数都是"true“(例如,perl -e '$x=(3 && 2); print $x,"\n"'
生成值为2;将语句更改为perl -e '$x=(3 & 4);打印$x,”n“生成值为4)。我试图找到一个操作符,它不需要用最后的参数除法,也不需要额外的if
语句来严格地返回0或1。
我寻找这样一个操作符的原因是基于两个操作数的逻辑连接将计数器增加0或1,我更喜欢简洁的语句,例如$counter += ($x && $y)
,而不是替代方法(例如,if($x && $y) counter++
或$counter += ($x && $y)/$y
)。
发布于 2014-07-28 05:58:43
您可以通过双重否定强制布尔值。
$counter += !!($x && $y);
发布于 2014-07-28 13:48:23
添加一个布尔值到计数器(即使被限制为0或1)有一个坏的代码气味。在Perl中这样做的惯用方法是使用语句修饰符:
$counter++ if $x && $y;
发布于 2014-07-28 05:48:22
三元算子怎么样?
use warnings;
use strict;
my $val1 = 0;
my $val2 = 0;
my $count = 0;
($val1 == 0 and $val2 == 0) ? $count++ : print "not equal\n";
print "$count\n";
https://stackoverflow.com/questions/24996679
复制