Cursus Raku / Geavanceerd / Operatoren / Traits en pragma’s / Exercises / Een aangepaste trait
Oplossing: Een aangepaste trait
Hier is een mogelijke oplossing voor de taak.
Code
my %role;
multi sub trait_mod:<is>(Routine:D $r, :$role!) {
%role{$r.name} = $role;
}
sub login() is role('admin') { }
say %role<login>;🦋 Je kunt de broncode vinden in het bestand custom-trait.raku.
Uitvoer
adminOpmerkingen
De trait is een
multi sub trait_mod:<is>waarvan de benoemde parameter:$role!hem laat afgaan bijis role(...). Anders dan een trait die alleen aanwezig is, ontvangt deze het argument:is role('admin')bindt'admin'aan$role.De body slaat die waarde op onder de naam van de subroutine. Als je daarna
%role<login>terugleest, krijg jeadmin. (Traits draaien tijdens het compileren, dus de vermelding staat er al tegen de tijd dat het programma draait.)