Курс Raku / Об’єкти, введення-виведення та винятки / Класи та об’єкти / Ролі / Вправи / Робот, що танцює

Розв’язання: Робот, що танцює

Ось один із можливих варіантів розв’язання задачі.

Код

role Dancing {
    method dance {
        'spinning around';
    }
}

class Robot {
    method speak {
        'beep';
    }
}

my $plain   = Robot.new;
my $dancing = Robot.new but Dancing;

say $plain.speak;
say $dancing.speak;
say $dancing.dance;

🦋 Вихідний код можна знайти у файлі dancing-robot.raku.

Вивід

beep
beep
spinning around

Коментарі

  1. На відміну від попередніх прикладів, Dancing не замінює наявного методу — вона приносить цілком новий метод dance, про який Robot нічого не знає.

  2. Robot.new but Dancing підмішує роль в один об’єкт під час виконання, тож $dancing уміє і speak (від класу), і dance (від ролі). Звичайний $plain навчився лише speak.

  3. Додаткова здатність належить саме цьому об’єктові, а не класу Robot. Виклик $plain.dance був би помилкою, бо $plain ніколи не отримував ролі.

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

Робот, що танцює   |   Інтроспекція об’єктів