Что значит!! (двойной восклицательный знак) означает?
В приведенном ниже коде из сообщение в блоге от 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!!
Ответы
Ответ 1
Это всего лишь два !
логических, а не операторов, расположенных рядом друг с другом.
Причиной использования этой идиомы является то, что вы получаете 1
или 0
. На самом деле он возвращает пустую строку, которая numifys равна 0. Обычно она используется только в числовом или булевом контексте.
Вы часто увидите это в соревнованиях Code Golf, потому что он короче, чем использование тройного оператора ? :
с 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
Ответ 2
не-нет.
Он преобразует значение в логическое (или близко, как Perl получает к такому веществу).
Ответ 3
Поскольку три других ответа утверждают, что диапазон равен "0" или "1", я просто подумал, что я бы сказал, что логические переменные в Perl (возвращаемые операторами типа ==
, not
и т.д.) undef
и 1
, а не 0
и 1
.