【问题标题】:perl logical and operator [duplicate]perl逻辑和运算符[重复]
【发布时间】:2014-07-29 07:12:02
【问题描述】:

是否有语句执行简单的 T/F 或 0/1 逻辑合取运算,返回布尔 T/F 或 0 或 1 的二进制或整数表示形式作为排他输出?

假设两个参数都是“真”(例如, perl -e '$x=(3 && 2); print $x,"\n"' 产生值 2;将语句更改为 perl -e '$x=(3 && 4); print $x,"\n"' 产生值 4)。我试图找到一个不需要除以最后一个参数或额外的if 语句来严格返回 0 或 1 的运算符。

我寻求这样一个运算符的原因是根据两个操作数的逻辑连接将计数器增加 0 或 1,我更喜欢$counter += ($x && $y) 等语句的简洁性,而不是替代方案(例如, if($x && $y) counter++ 或 $counter += ($x && $y)/$y)。

【问题讨论】:

  • @Hasturkun:感谢您指出该帖子。它没有引起我的注意。

标签: perl logical-operators


【解决方案1】:

你可以通过双重否定强制布尔值

$counter += !!($x && $y);

【讨论】:

    【解决方案2】:

    将布尔值添加到计数器(即使限制为仅 0 或 1)具有不好的代码气味。在 Perl 中执行此操作的惯用方法是使用语句修饰符:

    $counter++ if $x && $y;
    

    【讨论】:

      【解决方案3】:

      您没有意识到您已经自己提供了答案:

      && 和 and 运算符,而不是返回 T/F(布尔值)或 0/1(二进制)返回作为运算符的第二个参数提供的任何值,假设两个参数都是“真”

      那么

      $boolean = $val1 && $val2 && 1;
      

      如果 $val1 和 $val2 都为真,这将评估为 1,但是,如果任何一个参数为假,它将返回。要对错误强制执行 0,您可以基于相同的原则:

      $boolean = $val1 && $val2 && 1 || 0;
      

      虽然此时它开始变得笨拙,所以也许三元运算符是一个更好的解决方案:

      $boolean = ($val1 && $val2) ? 0 : 1;
      

      【讨论】:

        【解决方案4】:

        ternary operator怎么样:

        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";
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-04-21
          • 2011-03-14
          • 2020-10-02
          • 1970-01-01
          • 2015-04-17
          • 1970-01-01
          相关资源
          最近更新 更多