Curso de Raku / Objetos, entrada/salida y excepciones / Clases y objetos / Roles / Exercises / Un robot que baila
Solución: Un robot que baila
Aquí tienes una posible solución para la tarea.
Código
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;🦋 Puedes encontrar el código fuente en el archivo dancing-robot.raku.
Salida
beep
beep
spinning aroundComentarios
A diferencia de los ejemplos anteriores,
Dancingno sustituye un método existente: trae un métododancecompletamente nuevo, del queRobotno sabe nada.Robot.new but Dancingmezcla el rol en un único objeto en tiempo de ejecución, así que$dancingsabe tantospeak(de la clase) comodance(del rol). El simple$plainsolo llegó a aprenderspeak.La capacidad extra pertenece a ese objeto concreto, no a la clase
Robot. Llamar a$plain.dancesería un error, porque$plainnunca recibió el rol.