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 end
es 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, y step son 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
end
Una sentencia for como
for var_1, ···, var_n in explist do block end
es 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

end
Tenga en cuenta lo siguiente:
  • explist se evalúa una sola vez. Sus resultados son una funcióniteradora,un estado y un valor inicial para la primera variable iteradora.
  • f, s, y var son 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.