Curso de Raku / Avanzado / Operadores / Traits y pragmas / Exercises / Un trait personalizado
Solución: Un trait personalizado
Aquí tienes una posible solución para la tarea.
Código
my %role;
multi sub trait_mod:<is>(Routine:D $r, :$role!) {
%role{$r.name} = $role;
}
sub login() is role('admin') { }
say %role<login>;🦋 Puedes encontrar el código fuente en el archivo custom-trait.raku.
Salida
adminComentarios
El trait es un
multi sub trait_mod:<is>cuyo parámetro nombrado:$role!lo activa parais role(...). A diferencia de un trait de solo presencia, este recibe el argumento:is role('admin')vincula'admin'a$role.El cuerpo almacena ese valor bajo el nombre de la subrutina. Leer
%role<login>después devuelveadmin. (Los traits se ejecutan en tiempo de compilación, así que la entrada ya existe para cuando el programa se ejecuta.)