Closures: respuesta a Vekman
Leyendo el comentario de Venkman, debo reconocer que tiene razón en que el ejemplo que utilicé en el artículo era de funciones anónimas y no de un closure propiamente tal.
Para entender la diferencia, les pido que lean el interesante artículo Blocks and Closures in Ruby, donde el autor de Ruby nos habla sobre ambas estructuras. Leyendo con atención, llegué al siguiente ejemplo operacional en Ruby que puede ser útil para ver como funciona una closure:
- def ciclo(colores)
- x=-1
- return Proc.new {
- x=(x+1) % colores.size
- colores[x]
- }
- end
- closure=ciclo(%w{rojo azul negro})
- 1.upto(10) {|i|
- puts closure.call
- }
La salida en
rojo azul negro rojo azul negro rojo azul negro rojo
Como se podrán dar cuenta, la función ciclo devuelve un procedimiento, dentro del cual se mantienen las variables colores y x. Cada vez que se llama el Proc, ahora convertido en closure, x se incremente en uno y nos entrega el elemento del array que corresponde.
- 1992 lecturas

Enviar un comentario nuevo