Курс Raku / Розширені / Контейнери / Інтроспекція контейнерів
Використання WHAT
WHAT — це псевдометод, що дає доступ до типу значення.
Використовувати його можна майже так само, як .^name:
my $var = 42;
say $var.^name;
say $var.WHAT;Обидва виводять тип із невеликою різницею в оформленні:
.^name дає голе ім’я, а WHAT показує об’єкт
типу, записаний у дужках:
Int
(Int)Для змінної без обмеження типу тип починається з Any.
Щойно ви присвоюєте значення, і ^name, і WHAT
слідують за типом збереженого значення:
my $var;
say $var.^name; # Any
say $var.WHAT; # (Any)
$var = 'Hello';
say $var.^name; # Str
say $var.WHAT; # (Str)З обмеженням типу тип відомий одразу, ще до того, як щось присвоєно:
my Str $var;
say $var.^name; # Str
say $var.WHAT; # (Str)
$var = 'Hello';
say $var.^name; # Str
say $var.WHAT; # (Str)Порівняння об’єктів типу
Оскільки WHAT повертає сам об’єкт типу, два таких
об’єкти можна порівняти оператором тотожності значень
===, який запитує, чи є обидві сторони тим самим значенням.
Для кожного типу існує лише один об’єкт типу, тож це чистий спосіб
перевірити, чи мають два значення спільний тип:
my $a = 42;
my $b = 100;
say $a.WHAT === $b.WHAT; # True — обидва Int
say $a.WHAT === Int; # True
say $a.WHAT === Str; # FalseНа відміну від ==, який порівнює числа, ===
порівнює тотожність, тож він працює безпосередньо з об’єктами типу (та
іншими значеннями).
Практика
Виконайте 1 тест за змістом цієї теми.
Навігація курсом
← Інтроспекція контейнерів
| Тест —
WHAT та ^name →
💪 Або перейдіть одразу до вправ цього
розділу.