Курс языка программирования 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


💪 Или перейдите сразу к упражнениям этого раздела.