Что делает!! (удвойте восклицательный знак), средний?

В коде ниже, от сообщения в блоге Псевдонимом, я заметил использование двойного восклицательного знака !!. Я задавался вопросом, что это означало и где я мог войти в будущее для нахождения объяснений синтаксиса 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!!

34
задан Christopher Bottoms 24 October 2014 в 16:52
поделиться

3 ответа

Это всего лишь два ! булевы не операторы, сидящие рядом.

Причина использования этой идиомы заключается в том, что Вы получаете 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
48
ответ дан 27 November 2019 в 16:47
поделиться

нет-нет.

Оно преобразует значение в булевую (или так близко, как до этого доходит Perl).

12
ответ дан 27 November 2019 в 16:47
поделиться

Поскольку три других ответа утверждают, что диапазон является «0» или «1», я просто подумал, что упомяну, что бустеву в Perl (как возвращено операторами, как == , , и так далее) undef и 1 , а не 0 и 1 .

0
ответ дан 27 November 2019 в 16:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: