JavaFree.org | RubyOnBr.org

closures

Acompanhar closures 4 posts, 4 participantes

Lula-avocado abacate 2 posts

Ola pessoal, tudo bom?
Sou programador java e estudo ruby a um tempo so que este lance de closures ta obscuro para mim. Na verdade eu já entendi o conseito, so que não entendi o seu uso. Me falaram que nesta linha de codigo é criada uma closure, alguem poderia me dizer onde, ou mesmo quais apis do ruby usam closures? Assim eu acho que começaria a abrir a minha cabeça sobre o assunto, que é totalmente novo para mim.

eu entendo o que estes metodos e blocos fazer, agora aonde tem closure, se é que tem mesmo?

Muito obrigado,
Abacate

 
Avatar Neves 162 posts

Não sei a definição correta, mas vou tentar passar o que acho.
Closures são blocos de código que podem ser passados como parâmetro.
Existe duas sintaxes para ele, uma é a inline que você usou acima, a outra é em bloco, assim:

você pode ver que em ambos os casos, você colocou “.each” logo depois do bloco. Ou seja, o bloco está retornando um array.

Mas o segredo para entender é ver o que acontece dentro dos métodos que recebem o bloco.
Fiz rapidinho um exemplo abaixo, extendendo o Range para filtrar que é primo:

Repare apenas no método primos, veja que ele usa yield para retornar para o contexto interno do bloco.

Alguém me corrija por favor!

 
Avatar Bernardo Rufino 24 posts

É isso mesmo, closures são códigos que fecham o contexto atual, variaveis locais e podem ser passadas como valor, é o que acontece em Ruby, apesar de somente podermos passar 1 bloco de código, podemos passar quantos objetos do tipo Proc que quisermos como argumentos.

 
Avatar Akita On Rails 295 posts

Para você que é programador Java tente pensar numa closure como uma chamada de método de uma instância de um anonymous inner class, como fazemos quando implementamos um Listener num evento de Swing. A diferença é que a closure consegue alterar variaveis definidas fora dele. A explicação completa é longe disso mas na prática é um bom começo para entender.