Definim un mètode:
def hola
end
hola { puts "Hola Uriel" ]
Output
No s’executa res, no s’imprimix res perquè manca la instrucció yield
què crida el bloc hola { puts "Hola Uriel" }
.
Així afegim yield
per tal que s’imprimisca el bloc.
Hola Uriel
També es pot fer utilitzant do
i end
.
def hola
yield
end
hola do
puts "Hola Uriel"
end
Output
Hola Uriel
En cas de no enviar cap bloc donaria error.
def hola
yield
end
hola ()
Com que yield no troba cap bloc per executar ens torna una errada.
mis_bloques.rb:1:in `hola': wrong number of arguments (given 1, expected 0) (ArgumentError)
from mis_bloques.rb:5:in `<main>'
Per a solucionar aquest error podem recòrrer al mètode de Ruby block_given?
. Això ens donarà verdader quan rebem un bloc i fals quan no el rebem.
def hola
yield if block_given?
end
hola
Output
En cas d’enviar un bloc, l’executa:
def hola
yield if block_given?
end
hola { puts "Hola mundo" }
Output
Hola mundo
Així podem executar el mètode amb o sense bloc.
def hola &bloque
bloque.call if block_given?
end
hola { puts "Hola mundo" }
Output
Hola mundo
&
És especialment interessant quan estem utilitzant initialitation
.
yield
cal utilitzar-lo per defecte.