¿Cómo acceder al espacio de nombres Aquí durante el espacio de nombres Aquí local ingresado?Hola a todos,
Tengo problemas para acceder al espacio de nombres Here cuando ingresé el espacio de nombres Local Here. Mi script de ejemplo es el siguiente:
Names Default To Here(1);
Delete Symbols();
// Declare a variable in the "Here" scope
x = "Variable";
Local Here(
// Access the "Here" scope variable
y = Eval(Namespace("here") << Get("x"));
Show(y);
);Cuando utilicé el depurador, pude ver claramente que, después de ingresar Local Here, tenía 2 ámbitos Here. Supongo que uno es de Here y el otro es de Local Here. Probé varios enfoques, pero ninguno funciona hasta ahora.
Automatización y scriptingRe: ¿Cómo acceder al espacio de nombres Aquí durante el espacio de nombres Aquí local ingresado?Creo que no puedes hacerlo directamente (ese es el propósito de Local Here)

Funciones de programación (jmp.com)
Re: ¿Cómo acceder al espacio de nombres Aquí durante el espacio de nombres Aquí local ingresado?Hola jthi,
Si ese es el caso, ¿podría recomendarme cuál es el mejor enfoque para el "espacio de nombres raíz"? Estoy usando el espacio de nombres Global en este momento y tengo la intención de aprovechar el espacio de nombres Here y evitar la contaminación del espacio de nombres. Mi script involucra aproximadamente 80 variables.
Re: ¿Cómo acceder al espacio de nombres Aquí durante el espacio de nombres Aquí local ingresado?Depende de lo que estés haciendo. Puedes utilizar espacios de nombres con nombre, espacios de nombres anónimos, globales, aquí, locales... pero, aun así, casi siempre comenzaría mis scripts con Names Default To Here(1);
Re: ¿Cómo acceder al espacio de nombres Aquí durante el espacio de nombres Aquí local ingresado?Sin el valor predeterminado de nombres AQUÍ(1), las variables generadas "contaminarán" el espacio de nombres global.
Con los nombres predeterminados en AQUÍ(1), las variables generadas "contaminarán" el espacio de nombres Aquí .
Para organizar las variables, puedes crear tu propio espacio de nombres y crear las variables allí:
Names Default To Here(1);
Delete Symbols();
// Declare a variable in the "Here" scope
x = "Variable";
//get the value
ns = Namespace("here");
val = ns << Get Value("x");
Print(val);
Show(x);
new namespace("myNS");
NS:x = "variable";
Show(NS:x)Re: ¿Cómo acceder al espacio de nombres Aquí durante el espacio de nombres Aquí local ingresado?Es extraño que haya dos espacios de nombres HERE y que muestren el mismo contenido: el del aquí local.
Cuando sales del aquí local, solo hay un único espacio de nombres Aquí y muestra correctamente el contenido del espacio Nombres predeterminados aquí (1) .
Otro problema con el depurador JSL:
Desde JMP15, el espacio de nombres local de las funciones ya no es accesible: Locales de funciones en el depurador JSL
Re: ¿Cómo acceder al espacio de nombres Aquí durante el espacio de nombres Aquí local ingresado?Lo he comprobado. Parece que Local Here puede acceder sin problemas a los espacios de nombres globales y nombrados. Sin embargo, ¿cómo se supone que debo inicializar un espacio de nombres anónimo?
Básicamente, mi idea es que el usuario final no necesita preocuparse por las variables, y esas variables/espacios de nombres se cerrarán después de que se cierre la tabla de datos asociada con ellos.Re: ¿Cómo acceder al espacio de nombres Aquí durante el espacio de nombres Aquí local ingresado?Para este propósito, utilice el espacio de nombres Aquí . Este espacio permanece abierto mientras la ventana de scripting (o alguna ventana creada) esté abierta.
Se eliminará una vez que se cierren la ventana del script y los informes.
¿Como acceder?
Puedes acceder a cualquier espacio de nombres si tienes la "clave":
En un momento con acceso al espacio de nombres, simplemente cree una referencia al espacio de nombres y úselo como clave.
Importante:
Si almacena la clave en el espacio de nombres Aquí , no será accesible desde el exterior.
Para que sea accesible desde cualquier lugar, simplemente almacénelo en el espacio de nombres global.
-> global "contaminado" por una variable clave - no por unas 80 variables más : )
JMP manejará el espacio de nombres anónimo "aquí" y lo eliminará una vez que ya no sea necesario.
Names Default To Here(1);
Delete Symbols();
// Declare a variable in the outer "Here" scope
x = "Variable";
//myHere = Namespace("here"); // created inside HERE -> not accessible from local here
::myHere= Namespace("here"); // so let's create the reference in the global NS
z=5;
Local Here(
:: mylocalHere= Namespace("here"); // will be deleted after local HERE
// the same for "myHere": it will be deleted once the code is finished AND the editor is closed -> very convenient
::mypersistentNamespace = New Namespace("persistent"); // manually created -> persistent
persistent:y="still alive";
// Access the outer "Here" scope variable via the namespace reference
y = Eval(::myHere << Get value ("z"));
Show(y);
);
Show(:: mylocalHere); // deleted
Show(::mypersistentNamespace) // alive
desde otra ventana de script:
Show(:: myHere);
Show(:: mylocalHere);
Show(::mypersistentNamespace);