Курс Raku / Додаток 🆕 / Типи та текстові машини / Об’єкти та класи / Вправи / Тварини, що говорять

Розв’язання: Тварини, що говорять

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

Код

class Animal {
    has $.name;
    method speak { '...' }
    method greet { "{$.name} says {self.speak}" }
}

class Dog is Animal { method speak { 'Woof' } }
class Cat is Animal { method speak { 'Meow' } }

for Dog.new(name => 'Rex'), Cat.new(name => 'Tom') -> $pet {
    say $pet.greet;
}

🦋 Знайдіть програму у файлі animal-inheritance.raku.

Вивід

Rex says Woof
Tom says Meow

Коментарі

  1. greet означено один раз у базовому класі, але він викликає self.speak. Оскільки self є справжнім об’єктом, виклик дістає власний speak підкласу.

  2. Це поліморфізм: той самий greet дає Woof для собаки й Meow для кота без жодного умовного коду.

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

Тварини, що говорять   |   Регулярні вирази та граматики