2009-11-16 13 views

Respuesta

5

Lambdas (que existen en otros idiomas también) son como funciones ad hoc, creadas solo para un uso simple en lugar de realizar algunas acciones complejas.

Cuando utiliza un método como Array#collect que toma un bloque en {}, básicamente está creando un lambda/proc/block solo para el uso de ese método.

a = [1, 2, 3, 4] 
# Using a proc that returns its argument squared 
# Array#collect runs the block for each item in the array. 
a.collect {|n| n**2 } # => [1, 4, 9, 16] 
sq = lambda {|n| n**2 } # Storing the lambda to use it later... 
sq.call 4 # => 16 

Ver Anonymous functions en Wikipedia, y algunos other SO questions de los matices de lambda vs Proc.

+0

En el ejemplo anterior, aún podría hacerse sin la lambda. ¿No es el recoger lo mismo que para el siguiente ciclo con el bloque siendo el cuerpo? Solo estoy tratando de ver las ventajas de usar el bloque. – Zubair

+0

Por supuesto que podría hacerlo con un bucle for, pero esta es una manera más elegante y Ruby-ish de hacerlo. Otros métodos pueden ser más difíciles de duplicar con un bucle. – jtbandes

+0

Bien, supongo que sería útil saber qué cosas puedo hacer con Lambdas y Procs que, de lo contrario, serían demasiado detalladas, quizás con un ejemplo. – Zubair

Cuestiones relacionadas