Corso di Raku / Avanzato / Subroutine / Subroutine annidate / Exercises / Chiusura sull’esterno
Soluzione: Chiusura sull’esterno
Ecco una possibile soluzione del compito.
Codice
sub greet($name) {
sub message {
"Hello, $name!";
}
say message;
}
greet('Anna');🦋 Puoi trovare il codice sorgente nel file closure-over-outer.raku.
Output
Hello, Anna!Commenti
messagenon accetta argomenti, eppure puo usare$name. Una subroutine annidata chiude sulle variabili lessicali della subroutine che la contiene, quindi il$nameesterno e nello scope.Quando
greet('Anna')viene eseguita,$namevale'Anna', quindimessagerestituisceHello, Anna!. Questa condivisione dello scope esterno e cio che rende gli helper annidati qualcosa di piu di semplici funzioni nascoste.