Il existe déjà plusieurs fils de discussion sur ce sujet, ainsi qu'une section dans le guide de script, mais aucun ne répond vraiment à ma question.
J'ai deux fichiers, Main.jsl et Function.jsl, et j'inclus le dernier fichier dans le premier. Il y a une fonction définie dans Function.jsl que je souhaite appeler à l'intérieur d'une boucle For dans Main.jsl. Le problème que j'ai eu est que la fonction appelée utilise également une boucle For, et les boucles For dans Main.jsl et la fonction dans Function.jsl utilisent i comme variable de comptage, ce qui a entraîné une pollution de l'espace de noms.
J'ai essayé un tas de combinaisons en utilisant Names Default Here(1) à différents endroits dans les deux fichiers, en utilisant l'argument << New Context dans Include(), et même en définissant le nom de la fonction comme une variable globale en utilisant :: afin de essayer de résoudre ce problème. Cependant, le problème était toujours que soit 1) je pouvais appeler la fonction dans Function.jsl à partir de Main.jsl, mais il y aurait une pollution de l'espace de noms, ou 2) je ne pourrais pas appeler la fonction dans Function.jsl à partir de Main.jsl parce que la fonction a été définie dans un espace de noms ou une portée auquel je ne savais pas comment accéder.
Ma solution de contournement actuelle consiste à définir explicitement i et le contenu de toute la fonction à l'intérieur d'un Local(), et à définir la fonction elle-même en tant que variable globale en tant que telle :
Main.jsl
Include("Function.jsl", << New Context);
Names Default To Here(1);
for(i = 1, i <= 10, i++,
returns = ::function(arguments);
);Fonction.jsl
::function = Function({arguments},
Local({i},
for(i = 1, i <= 20, i++,
Do Something;
);<BR /> Return(returns);
);
);Ma question est : est-ce vraiment la bonne façon de procéder ? Par exemple, je pense qu'il serait préférable que je puisse attribuer un espace de noms à Function.jsl, puis l'utiliser pour appeler la fonction au lieu de jouer avec des variables globales, comme return = ns_function:function(arguments);. Et idéalement, cela empêcherait également la pollution de l'espace de noms, car le i dans Main.jsl se trouve dans l'espace de noms Here, tandis que le i dans Function.jsl se trouve dans l'espace de noms ns_function. Mais je ne sais pas comment/si c'est possible.
Utilisation de JMP Pro 16.2 (570548) sous Windows 10 Entreprise 64 bits.