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