El siguiente código no funciona, porque JSL evalúa la variable vacía cuando intenta pasarla a la función en lugar de evaluarla en tiempo de ejecución con la función.
isEmptyTest = Function({var},
return(isempty(var));
);
isEmptyTest(emptyVar);
Sería fantástico si esto cambiara.
Sí, estaba intentando usarlo para el Caso 1. Estaba creando una herramienta que aprovechaba un archivo de configuración de usuario. Dado que las variables se cargan desde el archivo definido por el usuario, pueden existir o no y pueden establecerse o no en verdadero/falso. Esperaba simplemente crear una función contenedora que probara esto hasta que me di cuenta de que podía hacer una declaración "o" ya que sale una vez que llega a la verdad.
if(isempty(var) | !var,
//run code)
);
Esto no produce un error b/c si la variable aún no se ha declarado, indicará un Veracidad y continuará ejecutando el código en la declaración if sin verificar las otras dependencias. Si la variable se ha definido, puedo comprobar si es verdadera o no.
Una tabla de símbolos realiza un seguimiento de todas las variables que alguna vez se han colocar a un valor. Si una variable nunca se ha configurado, no está inicializada y su uso probablemente sea un error.
el construido esta vacio() La función convierte en casos especiales a partir de varias situaciones inusuales.
Caso 1 : variable nunca utilizada antes
Is Empty(neverSeenBefore) = 1;
print(neverSeenBefore)
/*:
Name Unresolved: neverSeenBefore in access or evaluation of 'neverSeenBefore' , neverSeenBefore/*###*/
Nombre sin resolver significa que JMP buscó en la tabla de símbolos y no pudo localizar el nombre.
Caso 2 (caso normal): variable establecida en el valor devuelto por el incorporado vacío() función, u otra función que devolvió vacío()
ev=empty(); show(isempty(ev),ev);
/*:
Is Empty(ev) = 1;
ev = Empty();
Si espera realizar una prueba de vacío, debe utilizar el vacío() función para inicializar sus variables.
Caso 3 : variable borrada por el incorporado borrar globales() función
ev2=42; clear globals(ev2); show(isempty(ev2),ev2);
Is Empty(ev2) = 1;
ev2 = ev2;
Usando borrar globales() No es una buena idea en el código de producción, pero puede resultar útil al desarrollar código. NO elimina el símbolo de la tabla de símbolos, pero sí elimina su valor, ni siquiera deja vacío () para el valor. Puede actuar como vacío() o faltante, dependiendo de cómo se use.
JSL pasa argumentos a las funciones escritas por el usuario por valor, haciendo una copia para que la utilice la función. Una versión futura de JMP puede permitir pasar argumentos por referencia. Veremos qué sucede al pasar variables no inicializadas por referencia en ese momento.