Corso di Raku / Programmazione funzionale, concorrente, reattiva e web / Programmazione funzionale / Lambda e chiusure / Chiusure

Quiz — Chiusure

Cosa stampa il programma seguente?

sub make-acc {
    my $total = 0;
    return sub ($x) { $total += $x };
}

my &add = make-acc;
add(10);
add(20);
say add(5);
05
030
135
00

La subroutine restituita si chiude su $total, quindi tutte e tre le chiamate condividono la stessa variabile. Le prime due la portano a 30; la terza aggiunge 5 e stampa il totale corrente, 35.

Chiusure   |   Un contatore