Closures Ruby
Este curso explica o que é um closure em Ruby: um Proc ou lambda que captura as variáveis locais visíveis na criação e mantém acesso vivo a elas. Ele monta uma fábrica de contadores cujo estado só é alcançável pelo lambda devolvido. Compara o return dentro de um lambda, que sai só do lambda, com o return dentro de um Proc, que sai do método que o criou. Trata ainda do LocalJumpError levantado quando um Proc sobrevive ao seu método e de lambdas guardados num Hash, chamados pela chave.
O que você vai aprender
- ✓O que um closure captura e por que ele mantém uma ligação viva com as variáveis
- ✓Como montar um método que devolve um closure com estado privado e contínuo
- ✓Como o return se comporta dentro de um lambda e dentro de um Proc
- ✓Por que um Proc com return levanta LocalJumpError depois que seu método termina
- ✓Como guardar lambdas num Hash e chamá-los por uma chave escolhida em tempo de execução
O que um closure captura
A aula "Proc e lambda: uma olhada breve", do curso Blocos Ruby (do..end), já cobriu bastante coisa. &block transforma um bloco recebido num objeto Proc, e Proc.new e proc constroem um diretamente. .call, .() e [] são três formas de rodá-lo. lambda e o literal stabby ->() { } constroem uma versão…
Ler a aula completa grátis →Currículo
7 aulasO que um closure captura
Define closure como um Proc ou lambda que mantém acesso vivo às variáveis locais capturadas na criação.
Uma fábrica de contadores com estado próprio
Monta make_counter, cujo lambda reatribui o próprio count privado, e cada chamada gera estado independente.
return dentro de um lambda: sai só do lambda
Mostra que o return dentro de um lambda sai só do lambda, e o método em volta continua rodando.
return dentro de um Proc: sai do método que o envolve
Mostra que o return dentro de um Proc sai do método em que ele foi criado, pulando as linhas seguintes.
LocalJumpError: quando um Proc sobrevive ao seu método
Explica por que chamar um Proc com return depois que o método criador terminou levanta LocalJumpError: unexpected return.
Guardando procs num hash, chamados dinamicamente
Guarda lambdas como valores de um Hash e escolhe um por chave em tempo de execução, sem cadeia de if/elsif.
Juntando tudo: closures, procs, e lambdas
Revisa as seis aulas e as junta em make_account_logger, dois lambdas que dividem estado capturado e privado.