Raku kurss / Objekti, ievade/izvade un izņēmumi / Klases un objekti / Lomas / Exercises / Dejojošs robots

Risinājums: Dejojošs robots

Šeit ir iespējams risinājums uzdevumam.

Kods

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;

🦋 Atrodiet programmu failā dancing-robot.raku.

Izvade

beep
beep
spinning around

Komentāri

  1. Atšķirībā no iepriekšējiem piemēriem Dancing neaizstāj esošu metodi — tā atnes pavisam jaunu metodi dance, par kuru Robot neko nezina.

  2. Robot.new but Dancing izpildes laikā iemaisa lomu vienā objektā, tāpēc $dancing prot gan speak (no klases), gan dance (no lomas). Vienkāršais $plain iemācījās vienīgi speak.

  3. Papildu spēja pieder šim vienam objektam, nevis klasei Robot. Izsaukums $plain.dance būtu kļūda, jo $plain lomu nekad nesaņēma.

Kursa navigācija

Dejojošs robots   |   Objektu introspekcija