Cursus Raku / Objecten, in- en uitvoer en excepties / Klassen en objecten / Rollen / Exercises / Een dansende robot
Oplossing: Een dansende robot
Hier is een mogelijke oplossing voor de taak.
Code
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;🦋 Je kunt de broncode vinden in het bestand dancing-robot.raku.
Uitvoer
beep
beep
spinning aroundOpmerkingen
Anders dan in de eerdere voorbeelden vervangt
Dancinggeen bestaande methode — hij brengt een gloednieuwe methodedancemee waarRobotniets van weet.Robot.new but Dancingmengt de rol tijdens het draaien in één enkel object, dus$dancingkan zowelspeak(uit de klasse) alsdance(uit de rol). De kale$plainheeft alleen ooitspeakgeleerd.De extra mogelijkheid hoort bij dat ene object, niet bij de klasse
Robot.$plain.danceaanroepen zou een fout zijn, omdat$plainde rol nooit gekregen heeft.