LANZAetiqueta
(LANZAetiqueta
valor
) (LANZA "ERRORtexto_de_error
) (LANZA "ERROR4
mal_valor
) THROWetiqueta
(THROWetiqueta
valor
) (THROW "ERRORtexto_de_error
) (THROW "ERROR4
mal_valor
)
Termina la ejecución de la lista de instrucciones de ATRAPA.
LANZA se debe usar dentro del ámbito de una instrucción de ATRAPA que tiene el mismo etiqueta que el argumento etiqueta
de LANZA.
Si se ejecuta LANZA con un argumento valor
, entonces ATRAPA devuelve valor
.
Si no se ejecuta LANZA con un argumento valor
, entonces ATRAPA no devuelve nada.
El argumento etiqueta
debe ser una palabra.
LANZA "SYSTEM
termina la sesión de FMSLogo inmediatamente.
LANZA "TOPLEVEL
termina la ejecución de todos los procedimientos y todas las pausas interactivas y devuelve el control al alto nivel interactivo.
Este tiene el mismo efecto que presionar el Botón Alto.
Se puede usar LANZA "ERROR
para generar una condición de error.
Si no se atrapa el error, escribe un mensaje (ATRAPA "Error
) con la indicación usual de donde ocurrió el error que, en este caso, sería la instrucción de LANZA.
Si etiqueta
es igual a "ERROR
y das un argumento texto_de_error
, entonces se usa texto_de_error
como el texto del mensaje de error en lugar del texto estándar.
En este caso, el lugar que indica el error no es el lugar de la instrucción de LANZA, sino el lugar donde se ejecuta el procedimiento que contiene esta instrucción de LANZA.
Este habilita que los procedimientos definidos por usuarios puedan generar mensajes de error como si fueran primitivas.
Si etiqueta
es igual a "ERROR
y el segundo argumento es 4 (el código por error de mala entrada) y existe un tercer argumento, entonces se lanza un error de «mala entrada» y se usa el tercer argumento como el valor de la mala entrada.
Nota que cuando usas LANZA "ERROR
, el ATRAPA "ERROR
correspondiente, si existe, no devuelve un valor porque se trata el segundo argumento de LANZA como un mensaje a mostrar, no un valor a devolver.
El ejemplo siguiente demuestra cómo usar LANZA como una estructura de control:
PARA MIPROGRAMA2
ESCRIBE [Antes de lanzar]
LANZA "etiqueta1
ESCRIBE [Nunca llega aquí porque LANZA retrocede]
FIN
PARA MIPROGRAMA1
ATRAPA "etiqueta1 [MIPROGRAMA2]
ESCRIBE [Estoy de vuelta]
FIN
MIPROGRAMA1
Antes de lanzar
Estoy de vuelta
El ejemplo siguiente demuestra cómo probar por malas entradas:
PARA COORDENADAS :x :y SI NO NUMERO? :x [ (LANZA "ERROR 4 :x) ] SI NO NUMERO? :y [ (LANZA "ERROR 4 :y) ] DEVUELVE (PALABRA "|(| :x "|, | :y "|)| ) FIN MUESTRA COORDENADAS 1 2
(1, 2)MUESTRA COORDENADAS [1] [2]
a COORDENADAS no le gustó recibir [1]