Ejecución de un script después de realizar un cambio. No trabajar sin cerrar y volver a abrir el guión, ¿por qué?Estoy aprendiendo JSL y obteniendo un comportamiento que no creo que obtuve cuando comencé. Me gustaría saber si se espera este comportamiento o si se produce debido a un cambio de configuración que puedo haber realizado sin darme cuenta.
Tengo una secuencia de comandos "principal" simple que llama a una función y a otra secuencia de comandos. Cuando abro JMP nuevo y ejecuto el script principal o las otras funciones / scripts que llama, todos funcionan bien y producen los resultados esperados. Sin embargo, no funcionan cuando hago un cambio en alguno de ellos (por ejemplo, si comento el script que está incluido en el script principal, por ejemplo, la última línea a continuación). Si cierro todos los scripts abiertos y luego los vuelvo a disparar, funcionan de nuevo. Viniendo de otros lenguajes de programación, no espero tal comportamiento. Cualquier dirección es muy apreciada.
Ejemplos de mi guión principal a continuación (estoy en JMP13).
//clear log ();<BR />getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");Comentando la última línea de arriba (o si elimino el comentario clear log ()) es decir
//clear log ();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
//include ("generateJournal.jsl");me da el siguiente error en el script anterior
Name Unresolved: getDataTable4partID in access or evaluation of 'getDataTable4partID' , getDataTable4partID( "partID", "partIDname" ) /*###*/
Cualquier dirección es muy apreciada.
ScriptingRe: ejecutar un script después de realizar un cambio. No trabajar sin cerrar y volver a abrir el guión, ¿por qué?En tu ejemplo, no veo donde defines la función
getDataTable4partID
JSL es un lenguaje interpretado y requiere la creación de cualquier elemento referenciado en el código, antes de llamarlo.No es un lenguaje compilado, que primero pasa por todo el código y las funciones de identificación, etc. Ahora, lo que puede ser confusión es que una vez que se define la función, permanecerá en la memoria y estará disponible hasta que se borre con un
clear symbols();<BR />// or<BR />clear globals();
Si sigue su código con esto en mente, puede ver por qué su JSL no puede encontrar la función.
Re: ejecutar un script después de realizar un cambio. No trabajar sin cerrar y volver a abrir el guión, ¿por qué?Gracias @txnelson .
Aquí está la función
getDataTable4partID
¿Estás sugiriendo que use
clear symbols();
// clear globals();
en la parte superior de mi guión principal?
Si es así, entonces lo he cansado sin ningún cambio de comportamiento.
Además, olvidé mencionar anteriormente que cuando el script principal no se ejecuta (después de realizar un cambio en él) y necesito reiniciar JMP para que el script se ejecute como se esperaba nuevamente, también necesito ejecutar la función que mi script principal está llamando. , una vez, sin el cual mi script principal no se ejecuta. Este es claramente un comportamiento indeseable y me preocupa no estar haciendo las cosas correctamente.
Re: ejecutar un script después de realizar un cambio. No trabajar sin cerrar y volver a abrir el guión, ¿por qué?Debes comenzar todo tu script con:
Names Default to Here( 1 );
Clear Symbols();
Esto estabilizará el entorno del espacio de nombres y borrará todos los valores anteriores, por lo que comenzará de nuevo cada vez que ejecute el código desde la parte superior.
Re: ejecutar un script después de realizar un cambio. No trabajar sin cerrar y volver a abrir el guión, ¿por qué?Gracias @txnelson . Bien, esto es lo que hice y ahora mis scripts y funciones no funcionan incluso después de cerrar y volver a ejecutar o después de reiniciar JMP.
Mi guion principal
Names Default to Here( 1 );
Clear Symbols();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");Mi función es (sin detalles de la base de datos)
Names Default to Here (1)
getDataTable4PartID = Function({PartID}, {dtTemp},
dtTemp = Open Database("connectionstring",
"select '" || PartID || "' as value
from dual",
PartID
);
return(dtTemp);
);y mi guion
plotallcharts.jsl;
también tiene su primera línea como
Names Default to Here (1)
Sigo recibiendo el error
Name Unresolved: getDataTable4partID in access or evaluation of 'getDataTable4partID' , getDataTable4partID( "partID", "partIDname" ) /*###*/
pero a veces el registro no muestra nada al ejecutar el script principal.
Re: Ejecutar un script después de realizar un cambio. No trabajar sin cerrar y volver a abrir el guión, ¿por qué?Names Default to Here( 1 );
Clear Symbols();
getDataTable = getDataTable4partID("partID","partIDname");
include ("plotallcharts.jsl");
include ("generateJournal.jsl");
Supongo que esta es su primera sección de su código. ¿Correcto?
Su tercera línea en el código busca una función llamada "getDataTable4partID".Esa función no se ha definido cuando el código intenta ejecutar esa línea.Debe ejecutar la definición de la función antes de poder llamarla.