Курс по Raku / Напреднали / Оператори / Трейтове и прагми 🆕
Вградени трейтове
Трейтът се прилага с ключовата дума is веднага
след декларацията. Той се изпълнява по време на компилация и променя
някое фиксирано свойство на обекта, към който е прикрепен. Raku предлага
много вградени трейтове; вече сте използвали няколко от тях.
По подразбиране параметрите на подпрограмата са само за
четене — не можете да им присвоявате стойност вътре в
подпрограмата. Трейтът is copy ви дава частно,
модифицируемо копие на аргумента, което можете да променяте, без да
засягате извикващия:
sub greet($name is copy) {
$name = "dear $name";
say "Hello, $name!";
}
my $who = 'Anna';
greet($who); # Hello, dear Anna!
say $who; # Anna — the caller's own variable is untouchedТрейтът is rw отива по-далеч: той свързва параметъра с
променливата на извикващия, така че промяна, направена вътре в
подпрограмата, е видима навън:
sub bump($n is rw) {
$n++;
}
my $x = 10;
bump($x);
say $x; # 11Без един от тези трейтове $n++ би предизвикало грешка по
време на компилация, защото параметърът би бил само за четене.
Друг често срещан трейт задава стойност по подразбиране:
my $port is default(8080);
say $port; # 8080Тук is default задава на променливата стойност, към
която да се върне. Всеки вграден трейт — is rw,
is copy, is default и други — прикрепва едно
конкретно поведение по време на компилация към декларацията. Следващата
тема показва, че трейтовете не са затворено множество: можете да дефинирате
собствени.
Практика
Направете 1 тест върху съдържанието на тази тема.
Навигация в курса
← Трейтове и прагми 🆕 | Тест — Трейтове →
💪 Или преминете направо към упражненията в този
раздел.