Что делает! (двойной восклицательный знак) значит?
в коде ниже, у блоге псевдоним, Я заметил использование двойного восклицательного знака !!
. Мне было интересно, что это значит и куда я могу пойти в будущем, чтобы найти объяснения синтаксиса Perl. (Да, я уже искал !!
at 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;
...
}
обновление
Спасибо за все ваши ответы.
вот что-то еще, что я только что нашел, что связано в Список Операторов Сквоша x!!
3 ответов
это всего два !
логические операторы not, сидящие рядом друг с другом.
причина использовать эту идиому, чтобы убедиться, что вы получите 1
или 0
. На самом деле он возвращает пустую строку, которая numifys до 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
потому что три других ответа утверждают, что диапазон " 0 "или" 1", я просто подумал, что упомяну, что логические значения в Perl (как возвращено операторами, такими как ==
, not
и т. д.)undef
и 1
, а не 0
и 1
.