Raku-Kurs / Fortgeschritten / Container / Skalare Container

Typbeschränkungen

Im Grundlagenteil hast du gesehen, wie man den Typ einer Variable mit einer Typeinschränkung festlegt. Es ist wichtig zu betonen, dass es der Container ist, der diese Einschränkung für die Werte durchsetzt, die er akzeptieren darf.

Die folgende Deklaration erstellt einen Skalar-Container, der nur Ganzzahlen aufnehmen kann:

my Int $int;

Ein typisierter Container akzeptiert nur Werte, die zu seinem Typ passen, sodass alle folgenden Zuweisungen gültig sind:

my Int $int;

$int = 123;       # directly an integer
say $int;

$int = 100 + 23;  # the result is an integer
say $int;

$int = '123'.Int; # a string converted to an integer
say $int;

Raku führt in diesem Fall keine automatische Typumwandlung durch. Die Zuweisung einer Fließkommazahl (die in Raku ein Rat-Wert ist) ist daher nicht erlaubt:

my Int $int;
$int = 123.45;

Du bekommst bereits zur Kompilierzeit einen Fehler:

===SORRY!=== Error while compiling t.raku
Cannot assign a literal of type Rat (123.45) to a variable ($int) of
type Int.  You can declare the variable to be of type Real, or try to
coerce the value with 123.45.Int or Int(123.45), or just write the value
as 123.
at t.raku:2
------> <BOL>⏏$int = 123.45;

Um den Fehler zu vermeiden, konvertiere den Wert explizit:

my Int $int;

$int = 123.45.Int;
say $int; # 123

Lass dich nicht von den zwei Punkten in 123.45.Int verwirren. Der erste ist der Dezimalpunkt; der zweite ruft die Int-Methode auf dem rationalen (Rat) Wert auf.

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Themas.

Kursnavigation

Datentypen und skalare Container   |   Quiz — Typbeschränkungen


💪 Oder springen Sie direkt zu den Übungen dieses Abschnitts.