Курс языка программирования Raku / Объекты, ввод-вывод и исключения / Классы и объекты
Интроспекция объектов
В разделе о контейнерах вы
использовали .^name, чтобы спросить у значения его тип. Те
же метавызовы через .^ позволяют исследовать класс и его
объекты: их имена, их атрибуты и место в иерархии.
Метаметод .^name возвращает имя класса:
class Dog {
has Str $.name;
method bark { 'Woof' }
}
say Dog.^name; # DogМетаметод .^attributes перечисляет атрибуты класса.
Каждый показан со своим типом и внутренним приватным именем (та самая
форма $!, с которой вы встречались в приватных атрибутах):
say Dog.^attributes; # (Str $!name)Интроспекция полезна для инструментов, работающих с объектами обобщённо, — например, чтобы напечатать все атрибуты объекта, не зная заранее его класса. Следующая тема показывает, как увидеть цепочку наследования класса.
Ещё в этом разделе
Практика
Пройдите 1 тест по содержанию этого раздела.
Упражнения
В этом разделе 2 упражнения. Прежде чем приступать к практике, изучите все темы раздела.