Corso di Raku / Oggetti, input/output ed eccezioni / Classi e oggetti / Ruoli / Exercises / Un robot che balla
Soluzione: Un robot che balla
Ecco una possibile soluzione del compito.
Codice
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;🦋 Trova il programma nel file dancing-robot.raku.
Output
beep
beep
spinning aroundCommenti
A differenza degli esempi precedenti,
Dancingnon sostituisce un metodo esistente: porta un metododancecompletamente nuovo, di cuiRobotnon sa nulla.Robot.new but Dancingmescola il ruolo in un singolo oggetto a runtime, quindi$dancingsa siaspeak(dalla classe) siadance(dal ruolo). Il semplice$plainha imparato soltantospeak.La capacità in più appartiene a quel singolo oggetto, non alla classe
Robot. Chiamare$plain.dancesarebbe un errore, perché$plainnon ha mai ricevuto il ruolo.