Курс Raku / Об’єкти, введення-виведення та винятки / Класи та об’єкти
Ролі
Роль — це згорток поведінки (а іноді й даних), який можуть спільно використовувати кілька класів. Якщо успадкування каже, що клас є різновидом іншого, то роль описує те, що клас уміє робити.
Роль визначають ключовим словом role, дуже схоже на
клас, а надають класу трейтом does:
role Greet {
method hello {
'Hello from ' ~ self.name;
}
}
class Person does Greet {
has $.name;
}Клас Person тепер має метод hello із ролі,
наче його було написано в самому класі:
say Person.new(name => 'Anna').hello; # Hello from AnnaКлас, який виконує роль, розпізнається як такий, що її має:
say Person.new(name => 'Anna') ~~ Greet; # TrueЗверніть увагу, що метод hello ролі використовує
self.name, хоча сама роль не має атрибута
name. Це нормально: метод виконується як частина того
класу, який компонує роль, а цей клас надає name. Наступна
тема показує, що клас може взяти на себе більш ніж одну роль
одночасно.
Теми цього розділу
Практика
Виконайте 1 тест за змістом цього розділу.
Вправи
У цьому розділі 3 вправи. Перш ніж братися до практики, вивчіть усі теми розділу.
Навігація курсом
← Розв’язання: Успадкований атрибут | Композиція кількох ролей →