Raku-Kurs / Fortgeschritten / Container / Subskript-Adverbien

Exists und delete

Das Adverb :exists verwandelt eine Indizierung in eine Frage: Gibt es einen Wert an diesem Schlüssel oder Index? Es gibt einen Boolean zurück, ohne etwas abzurufen:

my %h = apple => 1, pear => 2;

say %h<apple>:exists; # True
say %h<plum>:exists;  # False

Dies ist der richtige Weg, um auf einen Schlüssel zu prüfen, denn das einfache Lesen von %h<plum> würde entweder einen undefinierten Wert zurückgeben oder, je nach den Daten, den Unterschied zwischen “fehlend” und “vorhanden, aber undefiniert” verbergen.

Das Adverb :delete entfernt den Eintrag und gibt den gespeicherten Wert zurück:

my %h = apple => 1, pear => 2;

say %h<apple>:delete; # 1
say %h.keys;          # (pear)
say %h;               # {pear => 2}

Der Eintrag apple ist verschwunden, und der gelöschte Wert 1 wird zurückgegeben, sodass du ihn weiterverwenden kannst.

Beide Adverbien funktionieren auch bei Arrays, über den Index:

my @a = 10, 20, 30;

say @a[1]:exists; # True
say @a[5]:exists; # False

say @a[1]:delete; # 20
say @a[1]:exists; # False

Falls du neugierig bist, wie das Array aussieht, nachdem ein mittleres Element entfernt wurde, hier ist die Antwort:

say @a; # [10 (Any) 30]

Eine einheitliche Notation ermöglicht es dir also, Container direkt abzufragen und zu verändern, anstatt auf separate Methoden zurückzugreifen.

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Themas.

Kursnavigation

Subskript-Adverbien   |   Quiz — Subskript-Adverbien


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