什么! (双重感叹号)是什么意思?

在下面的代码中,从Alias的博客文章中,我注意到了双重感叹号的使用!! 。 我想知道它是什么意思,以及我可以在将来如何找到像这样的Perl语法的解释。 (是的,我已经在perlsyn寻找!! )。

package Foo;

use vars qw{$DEBUG};
BEGIN {
    $DEBUG = 0 unless defined $DEBUG;
}
use constant DEBUG => !! $DEBUG;

sub foo {
    debug('In sub foo') if DEBUG;

    ...
}

UPDATE
感谢您的所有答案。

这里还有一些其他的东西,我只是发现这是相关的列表壁球运算符x!!


这只是两个! 布尔不是坐在一起的操作符。

使用这个习语的原因是为了确保你收到10 。 实际上,它返回一个空字符串,其numifys为0.它通常只用于数字或布尔上下文。

在Code Golf比赛中你会经常看到这一点,因为它比使用三元组更短? : ? :带有10运算符( $test ? 1 : 0 )。

!! undef  == 0
!! 0      == 0
!! 1      == 1
!! $obj   == 1
!! 100    == 1

undef ? 1 : 0  == 0
0     ? 1 : 0  == 0
1     ? 1 : 0  == 1
$obj  ? 1 : 0  == 1
100   ? 1 : 0  == 1

不是这样的。

它将该值转换为布尔值(或者与Perl得到这样的结果一样接近)。


因为其他三个答案都声称范围是“0”或“1”,所以我想我会提到Perl中的布尔值(由像==这样的运算符返回, not等等)是undef1 ,而不是01

链接地址: http://www.djcxy.com/p/72893.html

上一篇: What does !! (double exclamation point) mean?

下一篇: Java library for testing web services