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 AnnaKlaso, kiu faras rolon, estas rekonata kiel havanta tiun rolon:
say Person.new(name => 'Anna') ~~ Greet; # TrueRimarku, 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.