Una chiusura è una funzione che ha accesso ad un certo valore/variabile denominata fuori proprio ambito, così da una portata maggiore in prossimità della funzione quando è stato creato (ciò esclude argomenti di funzione e valori denominati locali creati all'interno della funzione). I tuoi esempi non si qualificano, poiché ogni funzione utilizza solo valori denominati dai propri ambiti.
Esempio:
(def foo
(let [counter (atom 0)]
(fn [] (do (swap! counter inc) @counter))))
(foo) ;;=> 1
(foo) ;;=> 2
(foo) ;;=> 3, etc
Ora foo
è una funzione che restituisce il valore di un atomo che è fuori della sua portata. Poiché la funzione mantiene ancora un riferimento a quell'atomo, l'atomo non sarà raccolto in modo improprio purché sia necessario foo
.
fonte
2013-02-14 12:44:33
Ciao, quindi il mio esempio potrebbe essere una chiusura se mi aveva definito il corpo del mio pow come hai fatto tu (la chiusura è l'anon f)? – Eddy
Sì, sarebbe un modo per descrivere la chiusura – Ankur
+1 Esempio elegante! –