Raku-Kurs / Fortgeschritten / Operatoren / Traits und Pragmas
Eingebaute Traits
Ein Trait wird mit dem Schlüsselwort is direkt
nach einer Deklaration angewendet. Es wird zur Kompilierzeit ausgeführt
und ändert eine feste Eigenschaft des Elements, an das es angehängt ist.
Raku wird mit vielen ausgeliefert; Sie haben bereits einige davon
verwendet.
Standardmäßig sind die Parameter einer Subroutine
schreibgeschützt — Sie können ihnen innerhalb der
Routine nichts zuweisen. Das Trait is copy gibt Ihnen eine
private, veränderbare Kopie des Arguments, die Sie ändern können, ohne
den Aufrufer zu beeinflussen:
sub greet($name is copy) {
$name = "dear $name";
say "Hello, $name!";
}
my $who = 'Anna';
greet($who); # Hello, dear Anna!
say $who; # Anna — the caller's own variable is untouchedDas Trait is rw geht noch weiter: Es bindet den
Parameter an die Variable des Aufrufers, sodass eine Änderung innerhalb
der Routine auch außerhalb sichtbar ist:
sub bump($n is rw) {
$n++;
}
my $x = 10;
bump($x);
say $x; # 11Ohne eines dieser Traits wäre $n++ ein
Kompilierzeitfehler, da der Parameter schreibgeschützt wäre.
Ein weiteres häufiges Trait setzt einen Standardwert:
my $port is default(8080);
say $port; # 8080Hier gibt is default der Variablen einen Wert, auf den
sie zurückfallen kann. Jedes eingebaute Trait — is rw,
is copy, is default und weitere — fügt einer
Deklaration ein bestimmtes Verhalten zur Kompilierzeit hinzu. Das
nächste Thema zeigt, dass Traits keine geschlossene Menge sind: Sie können Ihre
eigenen definieren.
Praxis
Lösen Sie 1 Quiz zum Inhalt dieses Themas.
Kursnavigation
← Traits und Pragmas | Quiz — Traits →
💪 Oder springen Sie direkt zu den Übungen dieses
Abschnitts.