已經有幾個關於這個主題的主題,以及腳本指南中的一個部分,但沒有一個真正回答我的問題。
我有兩個文件,Main.jsl 和 Function.jsl,我將後者包含在前者中。 我希望在 Main.jsl 的 For 循環中調用 Function.jsl 中定義的函數。 我遇到的問題是被調用的 Function 也使用了 For 循環,並且 Main.jsl 中的 For 循環和 Function.jsl 中的 Function 都使用 i 作為計數變量,因此這導致了命名空間污染。
我已經嘗試了一堆組合,在兩個文件的不同位置使用 Names Default Here(1),使用 Include() 中的 << New Context 參數,甚至使用 :: 將函數名稱定義為全局變量,以便嘗試解決這個問題。 但是,問題始終是:1)我能夠從 Main.jsl 調用 Function.jsl 中的函數,但是會存在命名空間污染,或者 2)我無法調用 Function.jsl 中的函數Main.jsl 因為函數是在我不知道如何訪問的命名空間或範圍中定義的。
我當前的解決方法是在 Local() 中顯式定義 i 和整個 Function 的內容,並將 Function 本身定義為全局變量,如下所示:
主要.jsl
Include("Function.jsl", << New Context);
Names Default To Here(1);
for(i = 1, i <= 10, i++,
returns = ::function(arguments);
);函數.jsl
::function = Function({arguments},
Local({i},
for(i = 1, i <= 20, i++,
Do Something;
);<BR /> Return(returns);
);
);我的問題是:這真的是正確的方法嗎? 例如,我認為如果我可以為 Function.jsl 分配一個命名空間,然後使用它來調用 Function 而不是弄亂全局變量,比如 return = ns_function:function(arguments); 會更好。 理想情況下,這也將防止命名空間污染,因為 Main.jsl 中的 i 在命名空間 Here 中,而 Function.jsl 中的 i 在命名空間 ns_function 中。 但我不知道如何/如果這是可能的。
在 Windows 10 Enterprise 64 位上使用 JMP Pro 16.2 (570548)。