Cursus Raku / Essentiëlen / Getypte variabelen
Allomorfen
Overweeg het volgende programma. Kun je, voordat je het uitvoert, aangeven welke invoerwaarden het zouden breken en op welke regel?
my $input = prompt 'Enter something: ';
my Int $i = $input;
my Str $s = $input;
say $i;
say $s;
Er worden hier drie scalairen variabelen aangemaakt. Twee daarvan, $i
en $s
, zijn getypeerde variabelen. Dat betekent dat $i
alleen gehele getallen kan opslaan en $s
alleen strings.
Het retourtype van prompt
hangt af van de tekens die we hebben getypt. Als de invoerstring een geheel getal kan vertegenwoordigen, zal het resultaat van het type IntStr
zijn, wat zowel Int
als Str
is, en dus kan worden toegewezen aan zowel een Int
als een Str
variabele. Dus, als je bijvoorbeeld 1234
invoert, breekt het programma niet.
$ raku allomorphs.raku
Enter something: 1234
1234
1234
Het IntStr
type is een voorbeeld van de zogenaamde allomorf — een gegevenstype dat twee andere typen combineert. Hier zijn nog een paar voorbeelden.
Als je een string invoert die geen geheel getal kan zijn, breekt het programma op het moment dat we $input
toewijzen aan $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 2
Merk op dat je een foutmelding krijgt, zelfs als de invoerstring naar een getal kan worden gecast, maar geen geheel getal is. Aangezien het niet mogelijk is om een drijvend-komma of een rationeel getal in een geheel getal container op te slaan, zal Raku een uitzondering genereren:
$ 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 2
De tweede toewijzing, $s = $input
, zal nooit breken omdat een string elke invoer kan accepteren.
🦋 Je kunt de broncode van dit programma vinden in het bestand allomorphs.raku.
Cursusnavigatie
← Getypte variabelen / Type conversie voor getypte variabelen | 💪 Oefeningen: Getypte variabelen →
Deze pagina is automatisch vertaald met ChatGPT 4o. Originele Engelse tekst.
Vertalingen van deze pagina: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська