6 nov. 2018

Teoría - Los proc en Ruby

Los proc en Ruby

Los bloques no son objetos, pero pueden convertirse en ellos gracias a la clase Proc. Los objetos tipo proc son bloques que se han unido a un conjuto de variables locales. Esto se hace gracias al método lambda del módulo Kernel.
prc = lambda{ "hola" }
Un bloque creado con lambda actúa como un método: si no especificas el número correcto de argumentos, no puedes llamar al bloque. La clase Proc tiene un método para llamar al bloque: el método call
prc = lambda {puts 'Hola'}
prc.call #llamamos al bloque
 
#otro ejemplo
toast = lambda do
  puts 'Gracias'
end
toast.call
La salida es:
Hola
Gracias
Para usar argumentos con lambda:
aBlock = lambda { |x| puts x }  
aBlock.call 'Hola Mundo!'
La salida es:
Hola Mundo!
Los procs son muy útiles por que:
  • No puedes pasar métodos dentro de otros métodos (usarlos como argumentos); pero si puedes usar procs como argumentos.
  • Los métodos no pueden devolver otros métodos; pero sí pueden devolver un procs.
#uso de procs como argumentos
 
def metod1 proc1
  puts 'Principio del metodo'
  proc1.call
  puts 'Final del metodo'
end
 
hola = lambda do
  puts 'Hola'
end
 
metod1 hola
la salida es:
Principio del metodo
Hola
Final del metodo