En Ruby, tanto Proc
como lambda
son objetos que permiten almacenar bloques de código para ser ejecutados posteriormente. Sin embargo, existen diferencias clave en su comportamiento, especialmente en el manejo de argumentos y en el flujo de retorno. Conocer cuándo usar cada uno es fundamental para escribir código Ruby más eficiente y robusto.
Proc
y lambda
Una lambda
verifica el número de argumentos que se le pasa y generará un error si la cantidad no coincide con la definida. Por otro lado, un objeto Proc
acepta cualquier número de argumentos, asignando nil
a los no especificados.
En una lambda
, el retorno (return
) finaliza solo el bloque actual y regresa al método llamador. En cambio, en un Proc
, return
termina el método completo en el que se define.
Proc
y lambda
# Creación de una lambda y un Proc
my_lambda = ->(x) { puts "Valor en lambda: #{x}" }
my_proc = Proc.new { |x| puts "Valor en Proc: #{x}" }
# Llamadas
my_lambda.call(5) # Output: "Valor en lambda: 5"
my_proc.call(5) # Output: "Valor en Proc: 5"
# Lambda verifica el número de argumentos
my_lambda = ->(x, y) { puts "Suma: #{x + y}" }
# my_lambda.call(5) generaría un error por número incorrecto de argumentos
# Proc acepta cualquier número de argumentos
my_proc = Proc.new { |x, y| puts "Suma: #{x.to_i + y.to_i}" }
my_proc.call(5) # Output: "Suma: 5"
return
def test_lambda
my_lambda = -> { return "lambda: retorna al método" }
my_lambda.call
"Fin de test_lambda"
end
def test_proc
my_proc = Proc.new { return "Proc: termina el método" }
my_proc.call
"Fin de test_proc"
end
puts test_lambda # Output: "Fin de test_lambda"
puts test_proc # Output: "Proc: termina el método"
Puedes encontrar más información en la documentación oficial de Ruby.
Jorge García
Fullstack developer