Курс языка программирования 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

Комментарии

  1. Роль предоставляет метод describe, а класс включает её через does Sized. Метод опирается на self.size, который даёт класс Box, — роль и класс складываются в законченный объект.

  2. Поскольку Box выполняет роль, умное сопоставление $b ~~ Sized даёт True: объект распознаётся как обладающий каждой ролью, которую включает его класс. Это удобно, чтобы проверить, что объект умеет, прежде чем вызывать метод роли.

Навигация по курсу

Коробка с размером   |   Питомец с именем и возрастом