Курс Raku / Розширені / Контейнери / Інтроспекція контейнерів

Використання VAR

VAR — це псевдометод, що повертає об’єкт контейнера, який лежить в основі. Для скалярної змінної виклик .VAR повертає контейнер Scalar, що стоїть за нею.

^name

Маючи контейнер, можна запитати ім’я його класу через .^name:

my $var1 = 42;
my $var2 = '42';

say $var1.^name;     # Int
say $var1.VAR.^name; # Scalar

say $var2.^name;     # Str
say $var2.VAR.^name; # Scalar

.^name для змінної повертає тип значення (Int або Str), а .VAR.^name повертає тип контейнера, яким в обох випадках є Scalar.

default

Метод default повертає типове значення контейнера — те, що ви отримуєте, коли контейнер не містить нічого власного. Трейтом is default ви задаєте його явно:

my Str $language is default('Raku');
say $language.VAR.default; # Raku

Без явного типового значення ним є тип контейнера. Для нетипізованого контейнера це Any, незалежно від того, яке значення він зараз містить:

my $language = 'Raku';
say $language.VAR.default; # (Any)

Для типізованого контейнера це тип обмеження:

my Str $language;
say $language.VAR.default; # (Str)

name

Метод name повертає ім’я контейнера разом із сигілом:

my $language;
say $language.VAR.name; # $language

Стежте за тим, щоб не плутати ^name (тип) і name (власне ім’я змінної).

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

Тест — WHAT та ^name   |   WHO та HOW


💪 Або перейдіть одразу до вправ цього розділу.