Raku kurss / Objekti, ievade/izvade un izņēmumi / Klases un objekti

Lomas

Loma ir uzvedības (un dažkārt datu) kūlītis, ko var koplietot vairākas klases. Ja mantošana saka, ka klase ir kāda cita paveids, tad loma apraksta to, ko klase prot darīt.

Lomu definējat ar atslēgvārdu role, gluži kā klasi, un klasei to dodat ar iezīmi does:

role Greet {
    method hello {
        'Hello from ' ~ self.name;
    }
}

class Person does Greet {
    has $.name;
}

Klasei Person tagad ir metode hello no lomas, it kā tā būtu uzrakstīta pašā klasē:

say Person.new(name => 'Anna').hello; # Hello from Anna

Klase, kas dara lomu, tiek atpazīta kā tāda, kam šī loma ir:

say Person.new(name => 'Anna') ~~ Greet; # True

Ievērojiet, ka lomas metode hello izmanto self.name, lai gan pašai lomai atribūta name nav. Tas ir labi: metode izpildās kā daļa no tās klases, kas lomu komponē, un šī klase nodrošina name. Nākamais temats parāda, ka klase var uzņemties vairāk nekā vienu lomu vienlaikus.

Šīs sadaļas temati

Prakse

Jūs gaida 1 viktorīna par šīs sadaļas saturu.

Vingrinājumi

Šajā sadaļā ir 3 vingrinājumi. Pirms ķerieties pie vingrinājumiem, izlasiet visus šīs sadaļas tematus.

  1. Kaste ar izmēru
  2. Mājdzīvnieks ar vārdu un vecumu
  3. Dejojošs robots

Kursa navigācija

Risinājums: Mantots atribūts   |   Vairāku lomu apvienošana