Cosa fa !! (Doppio punto esclamativo) significa?
Domanda
Nel codice qui sotto, da una post sul blog di Alias , ho notato che l'uso del doppio punto esclamativo !!
. Mi chiedevo cosa significasse e dove ho potuto andare in futuro di trovare spiegazioni per la sintassi Perl come questo. (Sì, ho già cercato !!
a 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;
...
}
Aggiorna
Grazie per tutte le vostre risposte.
Ecco un'altra cosa ho appena scoperto che è legato La lista Squash operatore x!!
Soluzione
E 'solo due !
booleani non gli operatori seduti uno accanto all'altro.
La ragione per usare questo idioma è quello di assicurarsi che si riceve una 1
o un 0
. In realtà si restituisce una stringa vuota che numifys a 0. Di solito è usato solo in numerico o contesto booleano però.
È spesso vedere questo in Codice Golf gare, perché è più corta utilizzando l'operatore ternario ? :
con 1
e 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
Altri suggerimenti
Non-no.
Si converte il valore a un valore booleano (o il più vicino Perl arriva a una cosa del genere).
Poiché altri tre risposte sostengono che la gamma è "0" o "1", ho solo pensato che avrei ricordare che booleani in Perl (come restituito da operatori come ==
, not
, e così via) sono undef
e 1
, non 0
e 1
.