Курс по Raku / Обекти, вход-изход и изключения / Класове и обекти / Роли / Exercises / Кутия с размер
Решение: Кутия с размер
Ето едно възможно решение на задачата.
Код
role Sized {
method describe {
'size is ' ~ self.size;
}
}
class Box does Sized {
has $.size;
}
my $b = Box.new(size => 10);
say $b.describe;
say $b ~~ Sized;🦋 Намерете програмата във файла greetable.raku.
Изход
size is 10
TrueКоментари
Ролята предоставя метода
describe, а класът го компонира сdoes Sized. Методът разчита наself.size, който се доставя от класаBox— ролята и класът се сглобяват, за да образуват завършения обект.Понеже
Boxизпълнява ролята, интелигентното съпоставяне$b ~~ SizedдаваTrue: обектът се разпознава като притежаващ всяка роля, която класът му компонира, а това е полезно, за да проверите какво може даден обект, преди да извикате метод на ролята.