Курс 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. Підрахунок атрибутів

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

Розв’язання: Робот, що танцює   |   Ланцюг успадкування