Corso di Raku / Avanzato / Contenitori / Introspezione dei contenitori
Usare WHAT
WHAT e uno pseudo-metodo che fornisce accesso al tipo di
un valore. Puoi usarlo in modo molto simile a .^name:
my $var = 42;
say $var.^name;
say $var.WHAT;Entrambi stampano il tipo con una piccola differenza nella
presentazione: .^name restituisce il nome semplice, mentre
WHAT mostra l’oggetto tipo, scritto tra parentesi:
Int
(Int)Per una variabile senza vincolo di tipo, il tipo inizia come
Any. Non appena si assegna un valore, sia
^name che WHAT seguono il tipo del valore
memorizzato:
my $var;
say $var.^name; # Any
say $var.WHAT; # (Any)
$var = 'Hello';
say $var.^name; # Str
say $var.WHAT; # (Str)Con un vincolo di tipo, il tipo e noto immediatamente, anche prima di qualsiasi assegnazione:
my Str $var;
say $var.^name; # Str
say $var.WHAT; # (Str)
$var = 'Hello';
say $var.^name; # Str
say $var.WHAT; # (Str)Confrontare oggetti tipo
Poiche WHAT restituisce l’oggetto tipo stesso, e
possibile confrontarne due con l’operatore di identita di
valore ===, che verifica se entrambi i lati sono
esattamente lo stesso valore. Esiste un solo oggetto tipo per ogni tipo,
quindi questo e un modo pulito per verificare se due valori condividono
lo stesso tipo:
my $a = 42;
my $b = 100;
say $a.WHAT === $b.WHAT; # True — both are Int
say $a.WHAT === Int; # True
say $a.WHAT === Str; # FalseA differenza di ==, che confronta numeri,
=== confronta l’identita, quindi funziona direttamente con
gli oggetti tipo (e altri valori).
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Introspezione dei
contenitori | Quiz — WHAT e
^name →
💪 Oppure vai direttamente agli esercizi di questa
sezione.