Artículo completo en ruby-doc.org
Una sentencia yield
es similar a un callback en JavaScript. Defines un
bloque de código y lo pasas como argumento de un método, este segundo que lo
recibe lo ejecuta internamente donde quiere mediante el uso de yield
. Como
se verá en el ejemplo siguiente defines tu método y luego a este le envías un
bloque de código que dentro ejecutas dos veces.
def twice
yield
yield
end
twice {puts("Hello World!")}
# Hello World!
# Hello World!
Además se le pueden pasar parámetros, si lo quisiéramos. En este segundo
ejemplo como se trata de un bloque de código de varias líneas lo hacemos con
do end
en lugar de usar las llaves { }
. Para indicarle los parámetros
usamos las barras verticales | parametro |
.
def names
yield("Joe")
yield("Sandy")
yield("Melissa")
end
names do |name|
puts "Hello " + name + ", how are you?"
end
# Hello Joe, how are you?
# Hello Sandy, how are you?
# Hello Melissa, how are you?