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

Решение: Найдите метод

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

Код

class Animal {
    method speak { 'generic' }
}

class Dog is Animal {
}

say so Dog.^find_method('speak');

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

Вывод

True

Комментарии

  1. .^find_method возвращает метод, если он существует, или неопределённое значение, если нет. so превращает это в обычное булево значение.

  2. Сам Dog не определяет методов, и тем не менее результат — True: find_method ищет по всей цепочке наследования и находит speak выше, в Animal. Это отражает то, как настоящий вызов метода у Dog нашёл бы унаследованный метод.

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

Найдите метод   |   Порядок разрешения методов