Corso di Raku / Avanzato / Operatori / Trait e pragma / Exercises / Un trait personalizzato

Soluzione: Un trait personalizzato

Ecco una possibile soluzione.

Codice

my %role;

multi sub trait_mod:<is>(Routine:D $r, :$role!) {
    %role{$r.name} = $role;
}

sub login() is role('admin') { }

say %role<login>;

🦋 Puoi trovare il codice sorgente nel file custom-trait.raku.

Output

admin

Commenti

  1. Il trait è una multi sub trait_mod:<is> il cui parametro nominato :$role! lo attiva per is role(...). A differenza di un trait di sola presenza, questo riceve l’argomento: is role('admin') lega 'admin' a $role.

  2. Il corpo memorizza quel valore sotto il nome della subroutine. Leggendo %role<login> successivamente si ottiene admin. (I trait vengono eseguiti al momento della compilazione, quindi la voce è già presente quando il programma viene eseguito.)

Un trait personalizzato   |   Rilassare strict