Espaces de noms et projetsSalut,
nous utilisons certaines fonctions personnalisées que nous partageons avec d'autres collègues via un AddIn.
L'espace de noms « personnalisé » est créé dans l'espace de noms global, les fonctions sont accessibles via custom:myfunction .
Le problème : certains collègues utilisent Projects.
un projet a son propre espace de noms global - et à partir de là, les fonctions personnalisées ne sont pas accessibles :
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")));
);
En revanche, il n'est pas possible d'exécuter le script une seconde fois à l'intérieur du projet [pour créer une fonction personnalisée en double dans le périmètre du projet]. Il semble que JMP trouve l'espace de noms « global » et essaie de le supprimer (!!) :
project = New Project(
Run Script(Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x, y}, x + y - 1 ) )));
);
Comment utiliser/accéder aux fonctions personnalisées en parallèle à partir de JMP standard et de projets ?
Automatisation et scriptsRé: Fonctions personnalisées à partir de projetsPeut-être une solution de contournement :
enregistrez un symbole *) dans l'espace de noms racine (via :::), pour accéder à l'espace de noms de la fonction personnalisée via le symbole :
::: custom = New Namespace("custom" );
// now accessible from everywhere via :::custom
project = New Project(
Run Script(Caption(Char(Namespace Exists( ::: custom ))));
);
malheureusement:
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 : Intéressant - le symbole doit avoir le même nom que l'espace de noms (!)
. Ce qui ne fonctionne pas :
::: customNS = New Namespace( "custom" );
...
:::customNS:myFunc(1)
bien que:
is namespace(:::customNS) // -> 1
Ré: Fonctions personnalisées à partir de projetsAh, ce n'est pas un problème avec les fonctions personnalisées , cela semble être un problème général avec les espaces de noms et les projets :
::: 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")));
);Intéressant : voici comment cela fonctionne
... mais pas très pratique
project = New Project(Run Script(Try(Caption("project: " || namespace(:::myNS):x), Caption ("fail"))));Ré: Fonctions personnalisées à partir de projetsJ'ai informé le support JMP (# 00170669) et j'ai reçu le retour selon lequel les problèmes sont considérés comme un bug :
:::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
Une astuce merveilleuse : localiser l'espace de noms racine :
myVar = :::myNs
myVar:x // success
merci beaucoup, @Jasean !!! Très fluide, bien plus pratique que namespace(:::myNS):x .
Ré: Fonctions personnalisées à partir de projetsDiscussion précédente avec un sujet similaire :
Impossible d'exécuter des modules complémentaires dans le projet
Ré: Fonctions personnalisées à partir de projetsCela m'a aidé, merci beaucoup d'avoir partagé le lien.
Ré: Fonctions personnalisées à partir de projetsJe viens d'ajouter le sujet à Tiny Traps dans Jmp et JSL - et j'ai regroupé les sujets liés à l'espace de noms.