Курс Raku / Об’єкти, введення-виведення та винятки / Класи та об’єкти / Ролі / Вправи / Робот, що танцює
Розв’язання: Робот, що танцює
Ось один із можливих варіантів розв’язання задачі.
Код
role Dancing {
method dance {
'spinning around';
}
}
class Robot {
method speak {
'beep';
}
}
my $plain = Robot.new;
my $dancing = Robot.new but Dancing;
say $plain.speak;
say $dancing.speak;
say $dancing.dance;🦋 Вихідний код можна знайти у файлі dancing-robot.raku.
Вивід
beep
beep
spinning aroundКоментарі
На відміну від попередніх прикладів,
Dancingне замінює наявного методу — вона приносить цілком новий методdance, про якийRobotнічого не знає.Robot.new but Dancingпідмішує роль в один об’єкт під час виконання, тож$dancingуміє іspeak(від класу), іdance(від ролі). Звичайний$plainнавчився лишеspeak.Додаткова здатність належить саме цьому об’єктові, а не класу
Robot. Виклик$plain.danceбув би помилкою, бо$plainніколи не отримував ролі.