Raku-Kurs / Fortgeschritten / Operatoren / Traits und Pragmas / Exercises / Ein benutzerdefinierter Trait
Lösung: Ein benutzerdefinierter Trait
Hier ist eine mögliche Lösung der Aufgabe.
Code
my %role;
multi sub trait_mod:<is>(Routine:D $r, :$role!) {
%role{$r.name} = $role;
}
sub login() is role('admin') { }
say %role<login>;🦋 Den Quellcode finden Sie in der Datei custom-trait.raku.
Ausgabe
adminKommentare
Das Trait ist ein
multi sub trait_mod:<is>, dessen benannter Parameter:$role!es füris role(...)auslöst. Im Gegensatz zu einem reinen Vorhandenseits-Trait empfängt dieses das Argument:is role('admin')bindet'admin'an$role.Der Rumpf speichert diesen Wert unter dem Namen der Subroutine. Das anschließende Lesen von
%role<login>ergibtadmin. (Traits werden zur Kompilierzeit ausgeführt, sodass der Eintrag bereits vorhanden ist, wenn das Programm läuft.)