Курс 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

Коментарі

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

  2. Оскільки Box виконує роль, розумне зіставлення $b ~~ Sized дає True: об’єкт розпізнається як такий, що має кожну роль, скомпоновану його класом, і це стає в пригоді, щоб перевірити, що об’єкт уміє, перш ніж викликати метод ролі.

Навігація курсом

Коробка з розміром   |   Улюбленець з ім’ям і віком