Sentencia FOR
La sentencia for tiene dos formas: una numérica y otra genérica.
El bucle for numérico repite un bloque de código mientras una variable de control recorre una progresión aritmética. Tiene la sintaxis siguiente:
statement ::= for name `=´ exp `,´ exp [`,´ exp] do block end
for i=1,1000 do
t[i] = t[i] + 1
end
El " bloque " se repite para el " nombre " empezando por el valor del primer " exp, hasta pasar el segundo " exp " por pasos del tercero " exp. Más concretamente, una sentencia for como
for v = e1, e2, e3 do block endes equivalente al código:do
local var, limit, step = tonumber(e1), tonumber(e2), tonumber(e3)
if not (var and limit and step) then error() end
while (step > 0 and var <= limit) or (step <= 0 and var >= limit)
do
local v = var
block
var = var + step
end
end
Tenga en cuenta lo siguiente:- Las tres expresiones de control se evalúan una sola vez, antes de que comience el bucle. Todas deben dar como resultado números.
var,limit, ystepson variables invisibles. Los nombres que figuran aquí son meramente explicativos.- Si la tercera expresión (el paso) está ausente, se utiliza un paso de 1.
Puede utilizar break para salir de un bucle for.
La variable de bucle ' v ' es local al bucle; no puedes usar su valor después de que el for termine o se rompa. Si necesita este valor, asígnelo a otra variable antes de romper o salir del bucle.
La sentencia genérica for trabaja sobre funciones, llamadas iteradores. En cada iteración, la función iterador es llamada para producir un nuevo valor, deteniéndose cuando este nuevo valor es nulo. El bucle for genérico tiene la siguiente sintaxis:
stat ::= for namelist in explist do block
end namelist ::= Name {`,´ Name}
La función pairs es una función iteradora integrada que devuelve todos los pares clave/valor de una tabla Lua.
for key,value in pairs(t) do
block
endUna sentencia for comofor var_1, ···, var_n in explist do block endes equivalente al código:do
local f, s, var = explist
local var_1, ···, var_n = f(s, var)
var = var_1
if var == null then break end
block
end
endTenga en cuenta lo siguiente:explistse evalúa una sola vez. Sus resultados son una funcióniteradora,un estado y un valor inicial para la primera variable iteradora.f,s, yvarson variables invisibles. Los nombres figuran aquí sólo a título explicativo.- Puede utilizar break para salir de un bucle for.
- Las variables del bucle var_i son locales al bucle; no puedes utilizar sus valores después de que termine el for. Si necesita estos valores, asígnelos a otras variables antes de romper o salir del bucle.