Hola de nuevo.
Ante todo aclarar que cuando posteo una duda intento hacerla con la mínima expresión.
Es por eso que me salen en funciones aparentemente pequeñas y simples.
Particularmente esta duda me ha surgido en una función de unas 300 líneas con un comportamiento totalmente caótico.
Tras reducirla a la mínima expresión la duda se ha convertido en esto:
import "mod_say";
function main()
begin
if (true)
say("1");
if (false)
say("2");
else
say("3");
end
else
say("4");
end
end
Que produce como salida 1 y 3.
Pero si hacemos esto:
import "mod_say";
function main()
begin
if (true)
say("1");
if (false)
say("2");
else
say("3");
//end Tan sólo quito está línea.
else
say("4");
end
end
Tenemos como salida 1,3,4.
Lo que no entiendo es que es lo que interpreta en la segunda forma y por qué no da error de compilación.
Saludos,
Lo que veo es que si no pones el 'end' el segundo 'else' se ignora y su 'end' pasa a ser el end del primero. Deberia dar error de compilación como dices, pero ya veremos que dice el Maestro que estos dias ha tocado el corazón del compilador.
Gracias Free. ¡Que rápido eres! :D
Con esto parece que un if pudiera tener infinitos elses mientras no le pongas un end. :D, habría que probar que salida da esto :D
if (false)
say("2");
else
say("3");
else
say("4");
else
say("5");
else
say("6");
end
Quote from: Fede on January 08, 2011, 09:00:30 PM
Gracias Free. ¡Que rápido eres! :D
(http://aula.elmundo.es/media/fotos/superlopez_dentro.jpg)
Esto da: 1,3,4
import "mod_say";
function main()
begin
if (true)
say("1");
if (false)
say("2");
else
say("3");
//end
else
say("4");
else
say("5");
end
end
Y esto:
import "mod_say";
function main()
begin
if (true)
say("1");
if (false)
say("2");
else
say("3");
//end
else
say("4");
else
say("5");
else
say("6");
end
end
Error de compilación.
Quote from: DCelso on January 08, 2011, 09:35:14 PM
Con esto parece que un if pudiera tener infinitos elses mientras no le pongas un end. :D, habría que probar que salida da esto :D
if (false)
say("2");
else
say("3");
else
say("4");
else
say("5");
else
say("6");
end
esto es asi... lamentablemente es un "feature" conocido, creo que pasa lo mismo con case con mismos valores.
lo otro ahora lo chequeo... puede que los else se interpreten como end...
va, no se necesita chequear, esta clarito en los ejemplos...
lo del else else else, sabia que lo tomaba sin dar mensaje de error, pero no sabia que lo interpretaba como END, en realidad no me puse a pensarlo aun, lo tome como un error heradado y lo deje como un pendiente.
ahora se lo que es, vere cuando lo corrijo... ahora estoy dejando a punto los nuevos scripts de compilacion y estoy intentando generar una version dingux.
Eso, eso, que estoy loco por desenpolvorar mis Dingoo's :)
Ánimos con la versión Dingux. Será un notición cuando tengas una version lista!!
Hará como un año o más que Pixel comentó por ahí el problema de los ELSE infinitos...
la verdad que no lo recuerdo