Что значит !! (двойной восклицательный знак) значит? - PullRequest
34 голосов
/ 30 января 2010

В приведенном ниже коде из сообщения в блоге 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!!

Ответы [ 3 ]

48 голосов
/ 30 января 2010

Это просто два ! логических оператора, которые не сидят рядом друг с другом.

Причина использования этой идиомы заключается в том, чтобы убедиться, что вы получаете 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
12 голосов
/ 30 января 2010

не-не.

Преобразует значение в логическое значение (или настолько близко, насколько Perl достигает такой вещи).

0 голосов
/ 31 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...