Persistência de escopo em closures
A persistência de dados em uma closure permite que um valor sobreviva ao fim da execução da função que o originou.
Considere o fluxo:
(defn messenger-builder [greeting]
(fn [who] (println greeting who)))- Uma função externa é chamada com um argumento (ex:
"Hello"). - Uma função interna (
fn) é criada e captura esse argumento. - A função externa termina e seu escopo “morre”, mas a função interna é retornada.
- Ao invocar a função retornada futuramente, ela ainda possui acesso ao valor
"Hello".
Exemplo:
(def hello-er (messenger-builder "Hello"))Ao chamar (hello-er "world!"), o resultado será "Hello world!" porque o vínculo foi preservado.