Corso di Raku / Avanzato / Contenitori / Contesti
Contesto elemento e lista
Due ulteriori contesti decidono se qualcosa viene trattato come una
lista di piu valori o come un singolo
elemento. Questa e la differenza alla base dei sigilli
@ e $.
Nel contesto lista, un array si espande nei suoi elementi.
Un ciclo for mette il suo argomento in contesto lista,
quindi itera su ciascun elemento:
my @a = 1, 2, 3;
my $count = 0;
$count++ for @a;
say $count; # 3Nel contesto elemento, lo stesso array viene trattato come
un singolo valore. Il contestualizzatore $( … ) forza il
contesto elemento, quindi il ciclo ora vede una sola cosa e viene
eseguito una volta:
my @a = 1, 2, 3;
my $count = 0;
$count++ for $(@a);
say $count; # 1Ecco perche assegnare un array a uno scalare lo impacchetta come un
singolo elemento piuttosto che copiarne gli elementi:
my $x = @a mette @a in contesto elemento. Nota
che quel singolo elemento puo essere un altro contenitore con molti
elementi al suo interno:
my @a = 1, 2, 3;
my $var = @a;
say $var; # [1 2 3]
say $var.WHAT; # (Array)La variabile $var ora contiene un singolo oggetto
(essendo un contenitore scalare), che e un Array. Puoi
facilmente verificarlo trattando $x come una sorta di
riferimento ad array (come lo chiameresti in altri linguaggi):
say $var[1]; # 2Il contestualizzatore corrispondente @( … ) fa
l’opposto, forzando il contesto lista.
Esiste anche il contesto sink — il contesto di un’istruzione il cui valore viene scartato, come una riga che esiste solo per il suo effetto collaterale. Quando un valore finisce in contesto sink senza nulla di utile da fare, Raku puo avvisare di un “useless use”, che e un utile suggerimento che hai dimenticato di usare un risultato.
Il sigillo che scegli ($ contro @) e in
realta una scelta di contesto, e i contestualizzatori $( )
e @( ) ti permettono di sovrascriverlo dove necessario.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Quiz — Contesti | Quiz — Contesto elemento →
💪 Oppure vai direttamente agli esercizi di questa
sezione.