Курс по Raku / Напреднали / Оператори / Трейтове и прагми 🆕 / Exercises / Потребителски трейт
Решение: Потребителски трейт
Ето едно възможно решение на задачата.
Код
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. (Трейтовете се изпълняват по време на компилация, така че записът вече е там, когато програмата се стартира.)