Курс языка программирования 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 тест по содержанию этой темы.
Навигация по курсу
← Трейты и прагмы | Тест — Трейты →
💪 Или перейдите сразу к упражнениям этого
раздела.