Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Классы и объекты / Интроспекция объектов / Exercises / Опишите класс

Решение: Опишите класс

Вот один из возможных вариантов решения задачи.

Код

class Animal {
}

class Dog is Animal {
}

say Dog.^name;
say Dog.^mro.elems;
say 'Cat'Dog.^mro.map(*.^name);

🦋 Исходный код можно найти в файле describe-a-class.raku.

Вывод

Dog
4
False

Комментарии

  1. .^name возвращает собственное имя класса — Dog.

  2. .^mro возвращает цепочку наследования, а .elems её пересчитывает. В цепочке четыре типа — Dog, его родитель Animal, а также универсальные Any и Mu, — поэтому получается 4.

  3. .^mro.map(*.^name) превращает эту цепочку в список имён типов, (Dog Animal Any Mu). Оператор принадлежности множеству затем проверяет, есть ли среди них Cat. Dog не происходит ни от какого Cat, поэтому ответ — False.

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

Опишите класс   |   Подсчёт атрибутов