Курс по Raku / Обекти, вход-изход и изключения / Класове и обекти / Роли / Exercises / Танцуващ робот
Решение: Танцуващ робот
Ето едно възможно решение на задачата.
Код
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така и не е получил ролята.