def hola &block
block.call
end
hola {puts "Yeeeeeeepee"}
Output
Yeeeeeeepee
Quan definim una variable amb un &
no estem reben una variable, estem reven un block.
Ho comprovem:
def hola &block
puts block.class.name
block.call
end
hola {puts "Yeeeeeeepee"}
Output
Proc
Yeeeeeeepee
La diferència entre un block i un proc.
- Els block no són objecte i el proc sí.
- Els block poden ser magatzemats en variables i cridats com arguments, no es poden intercanviar.
- Un mètode pot rebre un block però pot rebre diversos proc.
def hola proc1, proc2k
proc1.call
proc2.call
end
proc1 = Proc.new { puts "Hola proc1" }
proc2 = Proc.new { puts "Hola proc2" }
hola(proc1,proc2)
Output
Hola proc1
Hola proc2
Quan cal utilitzar un block i quan cal utilitzar un proc?
Per defecte cal utilitzar block a menys que hi haja una determinada raó com magatzemar una variable.
Els blocks són més ràpids.