Throw() dentro de incluir/función<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo un fragmento de código que utilizan muchos scripts, así que lo he transferido a un archivo de inclusión.Este código hace una verificación y lanza si falla.Sin embargo, descubro que solo elimina el script que se ejecuta dentro del include, después de lo cual recoge y comienza a ejecutar el código que originalmente llamó al include.A este tipo de comportamiento lo llamaré muerte suave.Necesito el throw() que se incluye para eliminar "ambos" scripts.
Las eliminaciones suaves son típicas en otros lenguajes, pero se ejecutan dentro de las funciones, de esta manera puede hacer que una pieza de código falle en silencio.Sin embargo, parece que throw() dentro de una función en realidad elimina todos los scripts en ejecución.
Ejemplo:
lanzarPrueba.jsl
Imprimir ( "A" ) ;
Incluir ( "~ruta\throwTest.include.jsl" ) ;
Imprimir ( "D" ) ;
tirarPrueba = Función ({} , { Local predeterminado } ,
Imprimir ( "MI" ) ;
tirar () ;
Imprimir ( "F" ) ;
) ;
tirarPrueba () ;
Imprimir ( "GRAMO" ) ;
throwTest.incluir.jsl
Imprimir ( "B" ) ;
tirar () ;
Imprimir ( "C" ) ;
Salida de registro:
"A" "B" "D" "E"
¿Alguien sabe cómo matar a JSL desde dentro de un script incluido?
Re: Throw() dentro de include/functionGenial gracias Craige@JMP !Esperaré con ansias el JMP 13 entonces.
Re: Throw() dentro de include/functionJMP 13 (programado para septiembre) aborda esto; la solución requerirá que agregues try(...) alrededor de include.(try no atrapa un lanzamiento de un include en 12.2).Sin el intento, JMP 13 se comportará igual que 12.2.
JMP 13:
Imprimir("A");
intentar( Incluir("$escritorio\throwTest.include.jsl"), imprimir("atrapar")) ;
Imprimir("D");
throwTest = Función ({}, {Local predeterminado},
Imprimir("E");
tirar();
Imprimir("F");
);
tirarPrueba();
Imprimir("G");
"A" "B" "atrapar" "D" "E"
Re: Throw() dentro de include/functionVeo las cosas de otra manera.
Si todo lo que quiere hacer es ejecutar "muchas cosas", "muchos tipos diferentes de funciones", no hay nada que le impida poner muchas funciones en un script.Incluso puede realizar verificaciones de errores y detener la ejecución de funciones sin lanzar todo el script. --vea mi script Return() a continuación.
El propósito de include es reducir la cantidad de veces que tiene que codificar exactamente el mismo script.
Si tengo 100 scripts diferentes, todos los cuales definen a=1; b=2; c=3; ... así sucesivamente hasta zz=702, no querrás escribir todo esto 100 veces.Sin inclusiones, lo más probable es que lo escriba una vez y lo copie y pegue en sus otros scripts.Pero, ¿y si en el futuro encuentras un error?Tendría que entrar en 100 scripts y corregir manualmente el código.Un trabajo tedioso.Pero, ¿qué sucede si termina encontrando una forma más rápida de realizar la misma tarea de definir todas estas variables?Tendría que refactorizar su código 100 veces en todos los scripts.¿Qué pasa si decides que realmente quieres a=2; b=3... etc.Tendrías que cambiar tu código 100 veces.Cambiar 100 scripts es una tarea propensa a errores, ¿qué sucede si pierde un script, hace un cambio incorrecto, etc.?
El propósito de include no es crear una relación esclavo/maestro en la que pueda matar al esclavo y salvar al maestro.Tenemos funciones para eso.El propósito de include es ahorrar tiempo de codificación.
(Nota: otro propósito de las inclusiones es ayudar a mantener los lenguajes de secuencias de comandos separados, lo que facilita la depuración y la limpieza del código.Las inclusiones son especialmente útiles en aplicaciones web con HTML/CSS/JavaScript, pero esto no se aplica realmente a JSL).
Pasar una variable de verificación tiene algunos problemas, no muchos, pero algunos.¿Qué pasa si otro script usa la misma variable de verificación?¿Qué sucede si decido cambiar la variable de verificación?¿Qué sucede si escribí mal la variable de verificación? En cada caso, tendría que buscar todos los scripts que incluí en throwTest.include y editar la variable de verificación para que sea correcta, lo que anula el propósito de usar el include en primer lugar.
Re: Throw() dentro de include/functionActualización, no estoy seguro de por qué no pensé en esto anoche, pero enviar la instrucción return() antes de tiempo generará efectivamente una función.Esto es común en otros idiomas también.
tirarPrueba = Función ({} , { Local predeterminado } ,
Imprimir ( "MI" ) ;
Devolver () ;
Imprimir ( "F" ) ;
) ;
tirarPrueba () ;
Imprimir ( "GRAMO" ) ;
Producción:
"P.EJ"
Re: Throw() dentro de include/functionTengo que estar en desacuerdo con su declaración de que el método anterior "derrota el propósito de usar una inclusión".
El código incluido puede realizar muchos, muchos tipos diferentes de funciones y hacer muchas cosas como limpieza de datos, transformaciones, etc. Si dentro del código incluido se descubre un caso de uso no válido, es posible que desee cerrar toda la aplicación.Por lo tanto, sería necesario lanzar el código incluido y, luego, cuando la ejecución se devuelva al código principal, sería necesario detectar que se ha detectado la situación de falla y luego sería necesario lanzar el script principal.
Re: Throw() dentro de include/functionSi bien esta es una solución simple, realmente anula el propósito de usar un include.
Re: Throw() dentro de include/functionCreo que puede resolver este problema con un simple paso de información a través de una variable de verificación y tomar medidas en el script principal.
Nombres predeterminados hasta aquí ( 1 ) ;
Incluir ( "C:\Usuarios\txjim\Documentos\JMP\throwTest.include.jsl" ) ;
Si ( tírarlo == 1 , Tirar () ) ;
Imprimir ( "D" ) ;
tirarPrueba = Función ( {} ,
{Local predeterminado} ,
Imprimir ( "MI" ) ;
Tirar () ;
Imprimir ( "F" ) ;
) ;
tirarPrueba() ;
Imprimir ( "GRAMO" ) ;
// Aquí está el archivo de inclusión
Imprimir ( "B" ) ;
tírarlo = 1 ;
Tirar () ;
Imprimir ( "C" ) ;