Курс Raku / Розширені / Оператори / Трейти та прагми 🆕 / Вправи / Власний трейт
Розв’язання: Власний трейт
Ось один із можливих варіантів розв’язання задачі.
Код
my %role;
multi sub trait_mod:<is>(Routine:D $r, :$role!) {
%role{$r.name} = $role;
}
sub login() is role('admin') { }
say %role<login>;🦋 Вихідний код можна знайти у файлі custom-trait.raku.
Вивід
adminКоментарі
Трейт є
multi sub trait_mod:<is>, чий іменований параметр:$role!спрацьовує дляis role(...). На відміну від трейта, який лише присутній, цей отримує аргумент:is role('admin')зв’язує'admin'із$role.Тіло зберігає це значення під іменем підпрограми. Зчитування
%role<login>згодом даєadmin. (Трейти виконуються під час компіляції, тож на момент запуску програми цей запис уже на місці.)