Block
, Proc
y Lambda
p = Proc.new {|bla| puts "I'm a proc that says #{bla}!" }
p = proc {|bla| puts "I'm a proc that says #{bla}!" }
lmb = lambda {|bla| "I'm also a proc, and I say #{bla}" }
also_lmb = ->(bla) { "I'm also a proc, and I say #{bla}" }
nil
return
y break
en procs y lambdas se comportan diferentes. El
return en un proc se ejecuta en el scope donde se definió el bloque. En lambdas
return y break devuelven el control al que lo ha llamado.next
se comporta igual en los tres casos.Usar la abreviatura de invocación de proc
cuando el método invocado es la
única operación de un bloque. Ejemplo sacado de la guía de estilos Rubocop
names = ["Pepe", "Juan", "Rosa", "Violeta"]
# BAD
upper_names = names.map { |name| name.upcase }
# ["PEPE", "JUAN", "ROSA", "VIOLETA"]
# GOOD
upper_names = names.map(&:upcase)
# ["PEPE", "JUAN", "ROSA", "VIOLETA"]