Курс 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 — власна змінна викликача недоторканаТрейт 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 тест за змістом цієї теми.
Навігація курсом
← Трейти та прагми 🆕 | Тест — Трейти →
💪 Або перейдіть одразу до вправ цього
розділу.