Ruby · Intermediário · Inglês · Técnico
closure
Bloco, proc ou lambda que carrega as variáveis do contexto onde foi criado, mesmo depois que esse contexto terminou de executar.
Onde usar
Permite fábricas de funções e contadores sem classes. No code review, atenção a closures que capturam objetos grandes e impedem o garbage collector de liberá-los.
Em código
def contador
n = 0
-> { n += 1 }
end
c = contador
c.call
puts c.call # => 2Exemplos
The lambda is a closure over the counter variable.
O lambda é uma closure sobre a variável do contador.
This closure keeps the whole request object alive.
Essa closure mantém o objeto inteiro da requisição vivo.
Cuidado
A closure captura a variável, não uma cópia do valor: se ela mudar depois, o bloco enxerga o novo valor.
Sinônimos
fechamento