Espacios de nombres y proyectosHola,
Utilizamos algunas funciones personalizadas que compartimos con otros colegas a través de un complemento.
El espacio de nombres "personalizado" se crea en el espacio de nombres global, se puede acceder a las funciones a través de custom:myfunction .
El problema: Algunos colegas utilizan Proyectos.
Un proyecto tiene su propio espacio de nombres global y, desde allí, no se puede acceder a las funciones personalizadas:
Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x}, x + 20 ) ));
project = New Project(
Run Script(Try(custom:myfunc(1), Caption ("Namespace not accessible")));
);
Por otro lado, no es posible ejecutar el script una segunda vez dentro del proyecto [para crear una función personalizada duplicada en el ámbito del proyecto]. Parece que JMP encuentra el espacio de nombres "global" e intenta eliminarlo (!!):
project = New Project(
Run Script(Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x, y}, x + y - 1 ) )));
);
¿Cómo se utilizan/acceden a funciones personalizadas en paralelo desde JMP estándar y desde proyectos?
Automatización y scriptingRe: Funciones personalizadas desde dentro de los proyectosQuizás una solución alternativa:
guarde un símbolo *) en el espacio de nombres raíz (a través de :::), para acceder al espacio de nombres de la función personalizada a través del símbolo:
::: custom = New Namespace("custom" );
// now accessible from everywhere via :::custom
project = New Project(
Run Script(Caption(Char(Namespace Exists( ::: custom ))));
);
desafortunadamente:
Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x}, x + 20 ) ));
project = New Project(
Run Script(Try(:::custom:myfunc(1), Caption ("content of the Namespace is not accessible")));
);
*) NB: Interesante: el símbolo debe tener el mismo nombre que el espacio de nombres (!)
. Lo que no funciona:
::: customNS = New Namespace( "custom" );
...
:::customNS:myFunc(1)
a pesar de:
is namespace(:::customNS) // -> 1
Re: Funciones personalizadas desde dentro de los proyectosAh, no es un problema con funciones personalizadas , parece ser un problema general con espacios de nombres y proyectos :
::: myNS = New Namespace("myNS");
:::myNS:x ="success";
caption ("direct: "|| :::myNS:x);
wait(2);
caption(remove);
project = New Project(
Run Script(Try(Caption("project: " || :::myNS:x), Caption ("fail")));
);Interesante: así es como funciona
... pero no muy práctico
project = New Project(Run Script(Try(Caption("project: " || namespace(:::myNS):x), Caption ("fail"))));Re: Funciones personalizadas desde dentro de los proyectosInformé al soporte de JMP (# 00170669) y recibí la respuesta de que los problemas se consideran un error:
:::myNs; // // New Namespace("myNS", ...)
As Root(myNs); // New Namespace("myNS", ...)
//:::myNs:x; // fail in project, works in script window outside project
As Root(myNs):x // success
Eval(:::myNs):x; // success
Namespace(:::myNs):x; // success
Un truco maravilloso: localizar el espacio de nombres raíz:
myVar = :::myNs
myVar:x // success
¡Muchas gracias, @Jasean ! Muy fluido, mucho más práctico que namespace(:::myNS):x .
Re: Funciones personalizadas desde dentro de los proyectosDiscusión previa con un tema similar:
No se pueden ejecutar complementos dentro del proyecto
Re: Funciones personalizadas desde dentro de los proyectosEsto me ayudó, muchas gracias por compartir el enlace.
Re: Funciones personalizadas desde dentro de los proyectosAcabo de agregar el tema a Tiny Traps en Jmp y JSL , y agrupé los temas relacionados con el espacio de nombres.