Курс языка программирования 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 упражнения. Прежде чем приступать к практике, изучите все темы раздела.
Навигация по курсу
← Решение: Унаследованный атрибут | Композиция нескольких ролей →