Esiste un equivalente Perl all'operatore nulla coalescenza (??) in C #?
-
19-09-2019 - |
Domanda
ho iniziato a davvero come C # 's ?? operatore. E sono abbastanza abituato al fatto che dove c'è qualcosa di utile in qualche lingua, è molto probabilmente in Perl troppo.
Tuttavia, non riesco a trovare ?? equivalente in Perl. C'è qualche?
Soluzione
A partire da 5.10 c'è l'operatore //
, che è semanticamente equivalente se si considera il concetto di undef
in Perl per essere equivalente alla nozione di null
in C #.
Esempio A:
my $a = undef;
my $b = $a // 5; # $b = 5;
Esempio B:
my $a = 0;
my $b = $a // 5; # $b = 0;
Altri suggerimenti
Adam dice , Perl 5.10 è l'operatore //
che mette alla prova il suo operatore di sinistra per definire-ness al posto della verità:
use 5.010;
my $value = $this // $that;
Se si utilizza una versione precedente di Perl, è un po 'confuso. Il ||
non funziona:
my $value = $this || $that;
In questo caso, se $this
è 0 o una stringa vuota, entrambi i quali sono definiti, si otterrà $that
. Per aggirare questo, il linguaggio è quello di utilizzare l'operatore condizionale in modo da poter rendere il proprio controllo:
my $value = defined( $this ) ? $this : $that;
In realtà, il cortocircuito operatore OR funziona anche quando si valuta undef:
my $b = undef || 5; # $b = 5;
Tuttavia, fallirà nel valutare 0 ma vero:
my $b = 0 || 5; # $b = 5;
La domanda implicita qualsiasi numero di argomenti, quindi la risposta implica una subroutine:
Qui si ottiene - restituirà il valore vuoto-string / non prima definito di una lista:
sub coalesce { (grep {length} @_)[0] }
Non che io sappia.
Perl non è davvero un grande utente del concetto nullo. Ha una prova per se una variabile non è definito. Nessun operatore speciale come l'?? però, ma è possibile utilizzare il condizionale:?. operatore con un test di indefinito e ottenere abbastanza vicino
E non vedo nulla nel perl operatore lista sia.