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

Интроспекция объектов

В разделе о контейнерах вы использовали .^name, чтобы спросить у значения его тип. Те же метавызовы через .^ позволяют исследовать класс и его объекты: их имена, их атрибуты и место в иерархии.

Метаметод .^name возвращает имя класса:

class Dog {
    has Str $.name;
    method bark { 'Woof' }
}

say Dog.^name; # Dog

Метаметод .^attributes перечисляет атрибуты класса. Каждый показан со своим типом и внутренним приватным именем (та самая форма $!, с которой вы встречались в приватных атрибутах):

say Dog.^attributes; # (Str $!name)

Интроспекция полезна для инструментов, работающих с объектами обобщённо, — например, чтобы напечатать все атрибуты объекта, не зная заранее его класса. Следующая тема показывает, как увидеть цепочку наследования класса.

Ещё в этом разделе

Практика

Пройдите 1 тест по содержанию этого раздела.

Упражнения

В этом разделе 2 упражнения. Прежде чем приступать к практике, изучите все темы раздела.

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

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

Решение: Танцующий робот   |   Цепочка наследования