Cursus Raku / Geavanceerd / Operatoren / Traits en pragma’s
Ingebouwde traits
Een trait wordt toegepast met het sleutelwoord
is, direct na een declaratie. Hij draait tijdens het
compileren en verandert een vaste eigenschap van datgene waaraan hij
hangt. Raku levert er veel mee; een paar heb je al gebruikt.
Standaard zijn de parameters van een subroutine
alleen-lezen — je kunt er binnen de routine niets aan
toekennen. De trait is copy geeft je een eigen, wijzigbare
kopie van het argument, die je kunt veranderen zonder de aanroeper te
raken:
sub greet($name is copy) {
$name = "dear $name";
say "Hello, $name!";
}
my $who = 'Anna';
greet($who); # Hello, dear Anna!
say $who; # Anna — de variabele van de aanroeper blijft ongemoeidDe trait is rw gaat verder: hij bindt de parameter aan
de variabele van de aanroeper, zodat een wijziging binnen de routine ook
buiten zichtbaar is:
sub bump($n is rw) {
$n++;
}
my $x = 10;
bump($x);
say $x; # 11Zonder een van deze traits zou $n++ een compilatiefout
zijn, omdat de parameter alleen-lezen zou zijn.
Een andere veelgebruikte trait stelt een standaardwaarde in:
my $port is default(8080);
say $port; # 8080Hier geeft is default de variabele een waarde om op
terug te vallen. Elke ingebouwde trait — is rw,
is copy, is default en meer — hangt één
specifiek gedrag tijdens het compileren aan een declaratie. Het volgende
onderwerp laat zien dat traits geen gesloten verzameling zijn: je kunt er zelf een
definiëren.
Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Cursusnavigatie
← Traits en pragma’s | Quiz — Traits →
💪 Of ga direct naar de oefeningen in deze
sectie.