Anuncios Google

Funcion que retome

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!



Offspring - Rise and Fall, Rage and Grace
Dark_AleX
21st Century Breakdown
American Idiot

SceneBET y PSP Euskaraz 2... ¿Pronto?


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de pspgorrister

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.

Imagen de DeViaNTe

No, pero se puede imitar su

No, pero se puede imitar su comportamiento con break.

broken = false;
for i=0,5 do
  for j=0,20,2 do
    if ( (i==1) and (j>=7)) then broken = true;break;  end
    print(...);
  end
 if ( broken == true ) then break; end
end


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es

Imagen de unai.

Entonces lo que el break hace

Entonces lo que el break hace es que siga el bucle normalmente, ¿Verdad?

Imagen de DeViaNTe

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

Imagen de pspgorrister

COMENTARIO ERRÓNEO

(Posteado arriba)

Imagen de unai.

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.



Offspring - Rise and Fall, Rage and Grace
Dark_AleX
21st Century Breakdown
American Idiot

SceneBET y PSP Euskaraz 2... ¿Pronto?

Imagen de DeViaNTe

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

Imagen de unai.

Esto si que se aproxima a lo

Esto si que se aproxima a lo que yo queria. Muchas gracias =)

Imagen de trom_us

creo se referia a...

broken = false;
for i=0,5 do
  for j=0,20,2 do
    if ( (i==1) and (j>=7)) then break;  end
    print(...);
  end
end

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.

 

Imagen de pspgorrister

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.

Imagen de unai.

Vale, gracias, intentaré

Vale, gracias, intentaré entenderlo XD

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.