Курс языка программирования 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: объект распознаётся как обладающий каждой ролью, которую включает его класс. Это удобно, чтобы проверить, что объект умеет, прежде чем вызывать метод роли.