做了什么! (双感叹点)的含义?
题
在下面的代码中,从 别名博客文章, ,我注意到使用双感叹点的使用 !!
. 。我想知道这是什么意思,以及将来可以去哪里找到这样的解释。 (是的,我已经搜索了 !!
在 佩尔森).
package Foo;
use vars qw{$DEBUG};
BEGIN {
$DEBUG = 0 unless defined $DEBUG;
}
use constant DEBUG => !! $DEBUG;
sub foo {
debug('In sub foo') if DEBUG;
...
}
更新
感谢您的所有答案。
这是我刚刚发现的其他东西 列表壁球操作员 x!!
解决方案
只是两个 !
布尔值不是坐在彼此旁边的操作员。
使用此习语的原因是确保您收到 1
或a 0
. 。实际上,它返回一个空字符串,该字符串通常仅在数字或布尔上下文中使用。
您经常会看到这个 代码高尔夫 比赛,因为它比使用三元 ? :
操作员与 1
和 0
($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
, ,等等) undef
和 1
, , 不是 0
和 1
.
不隶属于 StackOverflow