Курс по 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 тест върху съдържанието на тази тема.

Навигация в курса

Трейтове и прагми 🆕   |   Тест — Трейтове


💪 Или преминете направо към упражненията в този раздел.