В коде ниже, от сообщения в блоге Псевдонимом, я заметил использование двойного восклицательного знака !!
. Я задавался вопросом, что это означало и где я мог войти в будущее для нахождения объяснений синтаксиса 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;
...
}
ОБНОВЛЕНИЕ
Спасибо за все Ваши ответы.
Вот что-то еще, что я просто нашел, что это связано Оператор Сквоша Списка x!!
Это всего лишь два !
булевы не операторы, сидящие рядом.
Причина использования этой идиомы заключается в том, что Вы получаете 1
или 0
. На самом деле она возвращает пустую строку, которая числится в 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
нет-нет.
Оно преобразует значение в булевую (или так близко, как до этого доходит Perl).
Поскольку три других ответа утверждают, что диапазон является «0» или «1», я просто подумал, что упомяну, что бустеву в Perl (как возвращено операторами, как ==
,
, и так далее) undef
и 1
, а не 0
и 1
.