Corso di Raku / Fondamenti / Altro sui tipi / Variabili tipizzate
Allomorfi
Considera il seguente programma. Prima di eseguirlo, puoi dire quali valori di input lo romperebbero e a quale riga?
my $input = prompt 'Enter something: ';
my Int $i = $input;
my Str $s = $input;
say $i;
say $s;Qui vengono create tre variabili scalari. Due di esse,
$i e $s, sono variabili tipizzate. Ciò
significa che $i può contenere solo interi e
$s può contenere solo stringhe.
Il tipo di ritorno di prompt dipende dai caratteri che
abbiamo digitato. Se la stringa di input può rappresentare un numero
intero, il risultato sarà del tipo IntStr, che è
sia Int che Str, e quindi può essere
assegnato sia a una variabile Int che a una variabile
Str. Quindi, se inserisci, ad esempio, 1234,
il programma non si rompe.
$ raku allomorphs.raku
Enter something: 1234
1234
1234Il tipo IntStr è un esempio del cosiddetto
allomorfo — un tipo di dato che combina due altri tipi. Ecco
alcuni altri esempi.
Se inserisci una stringa che non può essere un numero intero, il
programma si rompe nel momento in cui assegniamo $input a
$i:
$ raku allomorphs.raku
Enter something: Hello, World!
Type check failed in assignment to $i; expected Int but got Str ("Hello, World!")
in block <unit> at allomorphs.raku line 2Nota che ottieni un errore anche se la stringa di input può essere convertita in un numero, ma non in un intero. Poiché non è possibile memorizzare un numero in virgola mobile o un numero razionale in un contenitore intero, Raku emetterà un’eccezione:
$ raku allomorphs.raku
Enter something: 3.14
Type check failed in assignment to $i; expected Int but got RatStr (RatStr.new(3.14, "3....)
in block <unit> at allomorphs.raku line 2Il secondo assegnamento, $s = $input, non si romperà mai
poiché una stringa può accettare qualsiasi input.
🦋 Puoi trovare il codice sorgente di questo programma nel file allomorphs.raku.
Navigazione del corso
← Quiz — conversione dei tipi | Creare variabili di tutti i tipi conosciuti →
💪 Oppure vai direttamente agli esercizi di questa
sezione.