yield en Ruby
Métodos que reciben un bloque y deciden cuándo ejecutarlo.
def timed
start = Time.now
result = yield
puts "took #{(Time.now - start).round(4)}s"
result
end
sum = timed { (1..100_000).sum }
puts sum
# block_given? hace que el bloque sea opcional
def maybe_log
yield "saving" if block_given?
end
maybe_log { |msg| puts "log: #{msg}" }
maybe_log
Cómo funciona
yieldcorre el bloque de quien llama desde dentro del método.- El valor del bloque vuelve al método como cualquier expresión.
block_given?vuelve el bloque opcional en lugar de un error.
Palabras clave y builtins usados aquí
defendifputsyield
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 286
- Tokens
- 69
- Ritmo de tres estrellas
- 85 tpm
Al ritmo de tres estrellas de 85 tokens por minuto, este intento toma unos 49 segundos.
Paso 2 de 3 en Métodos y bloques; paso 17 de 29 en Fundamentos del lenguaje.