Protocolo de for genérico
Comprenda el protocolo de iteradores de tres valores: función iteradora, estado y variable de control.
Protocolo de for genérico es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
Cómo funciona Generic for
La instrucción for llama a una función iteradora en cada iteración. Le pasa un estado y una variable de control, y se detiene cuando la función devuelve nil.
Retorno de tres valores
for var in iter, state, init do: Lua descompone esto como: función iteradora iter, estado invariable state y variable de control inicial init.
Protocolo de ipairs
ipairs(t) devuelve una función iteradora sin estado, la tabla como estado y 0 como variable de control inicial. Cada llamada devuelve el siguiente índice y su valor.
for i, v in ipairs({10, 20, 30}) do
print(i, v)
endIterador personalizado de tres valores
Implemente un iterador personalizado sin estado proporcionando explícitamente los tres valores.
local function iter(t, i)
i = i + 1
local v = t[i]
if v then return i, v end
end
for i, v in iter, {"a","b","c"}, 0 do
print(i, v)
endSimplificación mediante un closure
Un iterador basado en un closure solo necesita devolver la función iteradora (no necesita un estado ni una variable de control, ya que viven en los upvalues).
local function values(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
for v in values({1,2,3}) do print(v) endnil termina el bucle
El bucle generic for termina en cuanto la función iteradora devuelve nil como primer valor de retorno. Este es el contrato de terminación.
Varios valores de retorno
El iterador puede devolver varios valores; cada uno se asigna a una variable del bucle: for k, v in pairs(t).
for k, v in pairs({x=1, y=2}) do
print(k, v)
endUso del parámetro de estado
El parámetro de estado se pasa sin cambios a cada llamada del iterador. En los iteradores sin estado, contiene todo el contexto necesario (por ejemplo, la propia tabla).
Coroutine.wrap como iterador
coroutine.wrap(fn) devuelve una función que reanuda la coroutine en cada llamada; los valores producidos con yield se convierten en valores de retorno, lo que resulta perfecto como iterador de un generic for.
local function countdown(n)
return coroutine.wrap(function()
for i = n, 1, -1 do coroutine.yield(i) end
end)
end
for v in countdown(5) do print(v) endComposición de iteradores
Los iteradores pueden componerse: envuelva un iterador en otro para añadir filtrado o transformación.
local function mapped(iter, fn)
return function()
local v = iter()
if v ~= nil then return fn(v) end
end
endIteradores infinitos
Un iterador que nunca devuelve nil crea un bucle infinito. Proporcione siempre una condición de terminación o use break.
local function naturals()
local n = 0
return function() n = n+1; return n end
end
for v in naturals() do
if v > 5 then break end
print(v)
endPregunta sobre Generic for
¿Cuándo se detiene el bucle generic for?
Resumen: protocolo Generic for
El generic for llama a una función iteradora con un estado invariable y una variable de control. Se detiene al recibir nil. Los closures simplifican los iteradores con estado al codificarlo en upvalues.
Preguntas frecuentes
¿La lección «Protocolo de for genérico» es gratis?
Sí — el texto completo de «Protocolo de for genérico» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Protocolo de for genérico»?
Comprenda el protocolo de iteradores de tres valores: función iteradora, estado y variable de control. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Protocolo de for genérico»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Protocolo de for genérico
- Iteradores sin estado
- Iteradores con estado mediante closures
- Generadores basados en coroutines