Corso di Raku / Avanzato / Contenitori / Variabili speciali e dinamiche
Variabili dinamiche
Una variabile dinamica ha il twigil *. A
differenza di una variabile lessicale, che e’ visibile solo nel blocco
in cui e’ dichiarata, una variabile dinamica viene trovata cercando
verso l’esterno attraverso lo stack delle chiamate —
attraverso chi ha chiamato il codice corrente, indipendentemente da dove
quel codice e’ definito.
my $*greeting = 'Hello';
sub greet {
say $*greeting;
}
greet(); # HelloLa subroutine greet non dichiara $*greeting
e non la riceve come argomento, eppure puo’ vederla, perche’ la
variabile e’ dinamica e greet e’ stata chiamata da un punto
in cui essa e’ nello scope.
Questo esempio funzionerebbe anche con una semplice variabile scalare
globale $greeting, ma la natura delle variabili dinamiche
si vedra’ nel prossimo esempio.
Poiche’ la ricerca segue lo stack delle chiamate, una dichiarazione piu’ vicina sovrascrive una piu’ lontana per la durata del suo blocco:
my $*level = 'outer';
sub show {
say $*level;
}
show(); # outer
{
my $*level = 'inner';
show(); # inner
}La stessa show stampa outer la prima volta
e inner quando viene chiamata dall’interno del blocco che
ha ridichiarato $*level. Questo e’ lo scope
dinamico, ed e’ cosi’ che funzionano le variabili predefinite
$*OUT, $*IN e $*ERR di Raku —
puoi reindirizzare temporaneamente l’output ridichiarando
$*OUT in un blocco, e ogni routine che chiami al suo
interno vedra’ il nuovo valore. Le variabili dinamiche sono ideali per
il contesto che deve fluire nel codice chiamato senza essere passato
come argomento esplicito.
Pratica
Risolvi 1 quiz sul contenuto di questo argomento.
Navigazione del corso
← Quiz — Twigil | Quiz — Variabili dinamiche →
💪 Oppure vai direttamente agli esercizi di questa
sezione.