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

StackOverflow https://stackoverflow.com/questions/2168406

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top