Курс Raku / Об’єкти, введення-виведення та винятки / Класи та об’єкти / Ролі / Вправи / Коробка з розміром
Розв’язання: Коробка з розміром
Ось один із можливих варіантів розв’язання задачі.
Код
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: об’єкт розпізнається як такий, що має кожну роль, скомпоновану його класом, і це стає в пригоді, щоб перевірити, що об’єкт уміє, перш ніж викликати метод ролі.