Corso di Raku / Avanzato / Contenitori / Variabili speciali e dinamiche / Exercises / Sovrascrivere la dinamica
Soluzione: Sovrascrivere la dinamica
Ecco una possibile soluzione.
Codice
sub log-it($msg) {
say "$*prefix: $msg";
}
sub task {
log-it('working');
}
{
my $*prefix = 'INFO';
task();
}
{
my $*prefix = 'DEBUG';
task();
}🦋 Puoi trovare il codice sorgente nel file override-dynamic.raku.
Output
INFO: working
DEBUG: workingCommenti
taskchiamalog-itma non menziona mai$*prefix. Il valore raggiunge comunquelog-it, perche’ la ricerca dinamica segue lo stack delle chiamate verso l’esterno — oltretask— fino a chi si trova nello stack in quel momento.I due blocchi impostano valori diversi, quindi la stessa chiamata
task()produce un prefisso diverso ogni volta. Questo e’ cio’ che rende utili le variabili dinamiche: il contesto fluisce nel codice profondamente annidato senza dover essere passato attraverso ogni routine intermedia come argomento.