JMP usa el espacio de nombres global como el espacio de nombres predeterminado para cualquier script nuevo, la forma de especificar un espacio de nombres "local" es el comando Nombres predeterminados aquí (1). Mi pregunta es esta, cuando incluyo un archivo que tiene los nombres predeterminados aquí (1) en la parte superior, traerá los nombres/variables del script secundario. Sin embargo, si defino
include("filepath/name.ext", << New Context, << NamesDefaultToHere) mantendrá los espacios de nombres separados. ¿Cuál es el razonamiento detrás de esto? ¿Parece que debería estar haciendo lo mismo? Dado que estoy usando una declaración de inclusión, ¿se supone que quiero absorber los nombres del script secundario?
El siguiente conjunto devuelve x = 10, aunque NamesDefaultToHere(1) está en el script B
Guión A
x = 5;
include("filepath/script_B.jsl");
show(x);Guión B
namesDefaultToHere(1);
x = 10;
Mientras que este devuelve x = 5, porque tenía los nombres DefaultToHere en la declaración de inclusión
Guión A
x = 5;
include("filepath/script_B.jsl", << newContext, <<NAMESDEFAULTTOHERE></NAMESDEFAULTTOHERE>Guión B
namesDefaultToHere(1);
x = 10
@drewfoglia y @EvanMcCorkle hizo una excelente presentación en Discovery Summit en Tuscon 2019 titulada Scripting esencial para la eficiencia y la reproducibilidad: hacer menos para hacer más (2019-US-TUT-290) que habla de este tema.
Una de las diapositivas (22) proporciona conceptos erróneos sobre los nombres predeterminados aquí, uno de los cuales es que cada archivo JSL tiene su propio contexto Aquí. Esto es cierto si cada script se ejecuta por separado, pero cuando se incluye el archivo JSL B en el archivo JSL A, B comparte el contexto Aquí de A.
En el primer ejemplo, utilizando las reglas para resolver nombres , JMP encuentra X en el espacio de nombres Here y muestra el valor de 10.
En el segundo ejemplo, el uso de "nuevo contexto" está creando un espacio de nombres anónimo en el que se ejecuta el script B. En este caso, X no forma parte del espacio de nombres Aquí, por lo que se muestra el valor que se encuentra en el espacio de nombres Global.