Sentencia goto en Lua
La sentencia goto en Lua permite transferir el flujo de control incondicionalmente a una sentencia etiquetada.
Sintaxis
El formato de la sintaxis es el siguiente:
goto Label
El formato de la etiqueta (Label) es:
:: Label ::
El siguiente ejemplo utiliza goto en una sentencia de condición:
Ejemplo 1
local a = 1
::label:: print("--- goto label ---")
a = a+1
if a < 3 then
goto label -- Cuando a es menor que 3, salta a la etiqueta label
end
::label:: print("--- goto label ---")
a = a+1
if a < 3 then
goto label -- Cuando a es menor que 3, salta a la etiqueta label
end
El resultado de salida es:
--- goto label --- --- goto label ---
Del resultado de salida se puede observar que se imprimió una vez de más.--- goto label ---。
El siguiente ejemplo demuestra que se pueden establecer múltiples sentencias en la etiqueta (label):Ejemplo 2
i = 0
::s1:: do
print(i)
i = i+1
end
if i>3 then
os.exit() --i es mayor que3salir cuando
end
goto s1
::s1:: do
print(i)
i = i+1
end
if i>3 then
os.exit() --i es mayor que3salir cuando
end
goto s1
El resultado de salida es:
0 1 2 3
Con goto, podemos implementar la funcionalidad de continue:
Ejemplo 3
for i=1, 3 do
if i <= 2 then
print(i, "yes continue")
goto continue
end
print(i, " no continue")
::continue::
print([[i'm end]])
end
if i <= 2 then
print(i, "yes continue")
goto continue
end
print(i, " no continue")
::continue::
print([[i'm end]])
end
El resultado de salida es:
1 yes continue i'm end 2 yes continue i'm end 3 no continue i'm endOtras extensiones
Bucles en Lua