Iteradores propios en Lua
El for genérico maneja cualquier función que devuelva lo próximo.
-- The generic for drives any iterator function you write.
local function torch_burn(hours)
local left = hours
return function()
if left > 0 then
left = left - 1
return hours - left, left
end
end
end
for hour, remaining in torch_burn(4) do
print(string.format("Hour %d: %d hours of light left",
hour, remaining))
end
Cómo funciona
- La fábrica devuelve una clausura que guarda las horas restantes.
- Devolver nil termina el bucle — ese es todo el protocolo.
- Dos retornos por paso alimentan dos variables del bucle.
Palabras clave y builtins usados aquí
doendforfunctionifinlocalprintreturnthen
El intento, en números
- Líneas
- 15
- Caracteres a escribir
- 317
- Tokens
- 57
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 53 segundos.
Paso 3 de 3 en Clausuras; paso 16 de 27 en Fundamentos del lenguaje.