Hola.
Bueno, se que en C hay una función que se llama goto, que funciona así: (Sacada del tutorial de Nacho Cabanes)
#include <stdio.h> main() { int i, j; for (i=0; i<=5; i++) for (j=0; j<=20; j+=2) { if ((i==1) && (j>=7)) goto salida; printf("i vale %d y j vale %d", i, j); } salida: printf("Fin del programa\n") }
Mi pregunta es si hay alguna adaptación de goto para LUA.
Gracias!
SceneBET y PSP Euskaraz 2... ¿Pronto?
Lua no tiene goto
Así que para raras excepciones que requieran su uso, vas a tener que usar otro tipo de código. De todas formas el goto es muy poco usado, yo sólo lo he tenido que usar una vez en un proyecto, porque era tan complejo y tenia muchas partes con tantos bucles for aninados en que era mejor usar goto que aumentar el código 3 veces de tamaño.
Yo soy el primero que recomienda no usar goto, aunque bien es cierto que cuando hay que usarlo, te ahorras una cantidad de "ifs" y de variables y contadores "inutiles", que da gusto oiga.. ¡imagina ese ejemplo con 8 bucles for anidados!
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
No, pero se puede imitar su
No, pero se puede imitar su comportamiento con break.
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
Entonces lo que el break hace
Entonces lo que el break hace es que siga el bucle normalmente, ¿Verdad?
al reves, break se pone para
al reves, break se pone para "romper" el bucle en el que estamos, y salir fuera.
for i = 1, 100 do
system.message("Esto aparecera una vez, en vez de 100 como da que sospechar",0);
break;
end
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
COMENTARIO ERRÓNEO
(Posteado arriba)
Pero es que yo quiero que
Pero es que yo quiero que cuando ocurra cierta acción se vuelva a empezar el bucle. En principio pensaba hacerlo con dofile("") para volver a empezar el script desde el principio.
SceneBET y PSP Euskaraz 2... ¿Pronto?
imaginacion al poder
mm, pues facilmente "imitable" haciendo algo así:
function bla()
while true do
..
..
if condicion then break; end
end
if condicion then return bla(); end
end
bla();
Fijate. Se ejecutará el while true do, pq lo llamamos con bla(), abajo del todo, y si se cumple una cierta condicion, vuelve a empezar el while true do. (es como un goto, pero está imitado).
Se pueden hacer muchas cosas con lua, exale imaginacion xD
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
Esto si que se aproxima a lo
Esto si que se aproxima a lo que yo queria. Muchas gracias =)
creo se referia a...
no salirse de ambos for, solo del segundo....
Por otro lado....
En el primer ejemplo, el uso de goto no es necesario, pues solo necesitas brincar a la sigueinte linea despues del for del que necesitas salir, asi pues un break es suficiente, el goto nos permitiria dar un salto a alguna otra parte del programa ya sea a 1000 lineas abajo, o arriba, y como lo era antes el gosub, que daba el salto, y al primer return, te devorvia a la pocicion del gosub empleado, ha y tampoco hay sub, end sub en lua. es mas bien como el C, modular. esto es que se deve escribir el codigo en funciones.
pero como en lua no hay goto, si quisieramos dar saltos goto o gosub-return, pues se hace con funciones, es decir, quitaron lo que era inecesario por redundante.
GuinXell aprender mas...
Discrepo: Quiere salir de ambos
En el primer ejemplo, el goto es necesario, ya que el bucle se termina cuando i vale 1 y j vale 7. Un simple break no hace el salto de los 2 for, sólo del primero y él quiere salir de ambos (vamos, lo que hace el ejemplo en C). En ese ejemplo o usas un goto o usas el apaño de Deviante. Yo personalmente prefiero el apaño de Deviante, pero claro, a partir de más de 2 anidaciones de for, se vuelve más recomendable el goto.
Además un gosub no tiene nada que ver con un goto. se parecen lo mismo que un huevo a una castaña, puesto una subrutina termina retornando al lugar donde partió.
Un saludo.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
Vale, gracias, intentaré
Vale, gracias, intentaré entenderlo XD