Raku kurss / Padziļināti / Konteineri / Konteineru introspekcija

WHAT izmantošana

WHAT ir pseidometode, kas nodrošina piekļuvi vērtības tipam. To var izmantot līdzīgi kā .^name:

my $var = 42;

say $var.^name;
say $var.WHAT;

Abi izdrukā tipu ar nelielu atšķirību noformējumā: .^name dod tīru nosaukumu, savukārt WHAT parāda tipa objektu, ierakstītu iekavās:

Int
(Int)

Mainīgajam bez tipa ierobežojuma tips sākas kā Any. Tiklīdz piešķirat vērtību, gan ^name, gan WHAT seko saglabātās vērtības tipam:

my $var;
say $var.^name; # Any
say $var.WHAT;  # (Any)

$var = 'Hello';
say $var.^name; # Str
say $var.WHAT;  # (Str)

Ar tipa ierobežojumu tips ir zināms uzreiz, pat pirms kaut kas ir piešķirts:

my Str $var;
say $var.^name; # Str
say $var.WHAT;  # (Str)

$var = 'Hello';
say $var.^name; # Str
say $var.WHAT;  # (Str)

Tipa objektu salīdzināšana

Tā kā WHAT atgriež pašu tipa objektu, divus no tiem var salīdzināt ar vērtības identitātes operatoru ===, kas pārbauda, vai abas puses ir viena un tā pati vērtība. Katram tipam pastāv tikai viens tipa objekts, tāpēc šis ir tīrs veids, kā pārbaudīt, vai divām vērtībām ir vienāds tips:

my $a = 42;
my $b = 100;

say $a.WHAT === $b.WHAT; # True  — abi ir Int
say $a.WHAT === Int;     # True
say $a.WHAT === Str;     # False

Atšķirībā no ==, kas salīdzina skaitļus, === salīdzina identitāti, tāpēc tas darbojas tieši ar tipa objektiem (un citām vērtībām).

Prakse

Jūs gaida 1 viktorīna par šī temata saturu.

Kursa navigācija

Konteineru introspekcija   |   Viktorīna — WHAT un ^name


💪 Vai arī dodieties tieši uz šīs sadaļas vingrinājumiem.