Курс 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

Коментарі

  1. Трейт є multi sub trait_mod:<is>, чий іменований параметр :$role! спрацьовує для is role(...). На відміну від трейта, який лише присутній, цей отримує аргумент: is role('admin') зв’язує 'admin' із $role.

  2. Тіло зберігає це значення під іменем підпрограми. Зчитування %role<login> згодом дає admin. (Трейти виконуються під час компіляції, тож на момент запуску програми цей запис уже на місці.)

Навігація курсом

Власний трейт   |   Послаблення strict