Es gibt bereits mehrere Threads zu diesem Thema sowie einen Abschnitt im Scripting Guide, aber keiner beantwortet meine Frage wirklich.
Ich habe zwei Dateien, Main.jsl und Function.jsl, und ich füge die letztere Datei in die erstere ein. In Function.jsl ist eine Funktion definiert, die ich innerhalb einer For-Schleife in Main.jsl aufrufen möchte. Das Problem, das ich hatte, ist, dass die aufgerufene Funktion auch eine For-Schleife verwendet, und sowohl die For-Schleifen in Main.jsl als auch die Funktion in Function.jsl verwenden i als Zählvariable, daher führte dies zu einer Namespace-Verschmutzung.
Ich habe eine Reihe von Kombinationen mit der Verwendung von Names Default Here(1) an verschiedenen Stellen in beiden Dateien ausprobiert, indem ich das << New Context-Argument in Include() verwendet und sogar den Funktionsnamen als globale Variable mit :: definiert habe, um versuchen Sie, dieses Problem zu lösen. Das Problem war jedoch immer, dass entweder 1) ich die Funktion in Function.jsl von Main.jsl aus aufrufen konnte, aber es zu einer Namensraumverschmutzung kam, oder 2) ich die Funktion in Function.jsl nicht von dort aus aufrufen konnte Main.jsl, da die Funktion in einem Namespace oder Bereich definiert wurde, auf den ich nicht zugreifen kann.
Meine aktuelle Problemumgehung besteht darin, i und den Inhalt der gesamten Funktion innerhalb einer Local () explizit zu definieren und die Funktion selbst als globale Variable als solche zu definieren:
Main.jsl
Include("Function.jsl", << New Context);
Names Default To Here(1);
for(i = 1, i <= 10, i++,
returns = ::function(arguments);
);Funktion.jsl
::function = Function({arguments},
Local({i},
for(i = 1, i <= 20, i++,
Do Something;
);<BR /> Return(returns);
);
);Meine Frage: Ist das wirklich der richtige Weg? Zum Beispiel denke ich, dass es besser wäre, wenn ich Function.jsl einen Namensraum zuweisen und diesen dann verwenden könnte, um die Funktion aufzurufen, anstatt mit globalen Variablen herumzuspielen, wie etwa returns = ns_function:function(arguments);. Und im Idealfall würde dies dann auch die Namespace-Verschmutzung verhindern, weil das i in Main.jsl im Namespace Here liegt, während das i in Function.jsl im Namespace ns_function liegt. Aber ich weiß nicht, wie/ob das möglich ist.
Verwendung von JMP Pro 16.2 (570548) unter Windows 10 Enterprise 64-Bit.