Kurso de Raku / Objektoj, en- kaj eligo kaj escepto / Klasoj kaj objektoj

Roloj

Rolo estas fasko de konduto (kaj foje datumoj), kiu povas esti kunhavata de pluraj klasoj. Dum heredo diras, ke klaso estas speco de alia, rolo priskribas ion, kion klaso povas fari.

Vi difinas rolon per la ŝlosilvorto role, multe kiel klason, kaj vi donas ĝin al klaso per la trajto does:

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

class Person does Greet {
    has $.name;
}

La klaso Person nun havas la metodon hello el la rolo, kvazaŭ ĝi estus skribita en la klaso mem:

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

Klaso, kiu faras rolon, estas rekonata kiel havanta tiun rolon:

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

Rimarku, ke la metodo hello de la rolo uzas self.name, kvankam la rolo mem havas neniun atributon name. Tio estas en ordo: la metodo ruliĝas kiel parto de kiu ajn klaso kunmetas la rolon, kaj tiu klaso provizas name. La sekva temo montras, ke klaso povas preni pli ol unu rolon samtempe.

Temoj en ĉi tiu sekcio

Praktiko

Vin atendas 1 kvizo pri la enhavo de ĉi tiu sekcio.

Ekzercoj

En ĉi tiu sekcio estas 3 ekzercoj. Trarigardu ĉiujn temojn de ĉi tiu sekcio antaŭ ol komenci la ekzercojn.

  1. Skatolo kun grandeco
  2. Dorlotbesto kun nomo kaj aĝo
  3. Dancanta roboto

Kursa navigado

Solvo: Heredita atributo   |   Kunmeti plurajn rolojn