Курс по Raku / Обекти, вход-изход и изключения / Класове и обекти
Роли
Ролята е сноп от поведение (а понякога и данни), който може да се споделя от няколко класа. Докато наследяването казва, че класът е вид друг клас, ролята описва нещо, което класът може да прави.
Дефинирате роля с ключовата дума role, досущ като клас,
и я давате на клас с трейта does:
role Greet {
method hello {
'Hello from ' ~ self.name;
}
}
class Person does Greet {
has $.name;
}Класът Person вече има метода hello от
ролята, все едно е бил написан в самия клас:
say Person.new(name => 'Anna').hello; # Hello from AnnaКлас, който изпълнява роля, се разпознава като притежаващ тази роля:
say Person.new(name => 'Anna') ~~ Greet; # TrueЗабележете, че методът hello на ролята използва
self.name, макар самата роля да няма атрибут
name. Това е наред: методът се изпълнява като част от онзи
клас, който компонира ролята, а този клас предоставя name.
Следващата тема показва, че класът може да поеме повече от една роля
наведнъж.
Теми в този раздел
Практика
Направете 1 тест върху съдържанието на този раздел.
Упражнения
Този раздел съдържа 3 упражнения. Разгледайте всички теми в раздела, преди да се захванете с практиката.