其他幾種程式語言預設使用本地命名空間/環境,而不是全域環境。 JMP 專家表示,每當腳本編寫(通常為本機命名空間)適合新腳本時,NamesDefaultToHere(1) 就是 BKM,以避免與其他 JMP 腳本發生衝突。 當您希望腳本位於全域命名空間中時,定義 NamesDefaultToHere(0) 會比使用「true」參數定義每個腳本更方便
你好@cnattrass , 謝謝你的建議! 我們已收到您的請求並將予以考慮。
在我看來,將全域命名空間作為預設值是一個極其糟糕的設計決策,儘管我知道這對於向後相容早期版本的 JMP 中編寫的 JSL 腳本可能是必要的。
我認為,當由於多個腳本的變數名稱衝突而開始發生奇怪的、難以調試的事情時,任何新的 JSL 編碼人員都會經歷艱難的過程才能了解這一點;特別是,先前在全域命名空間下執行的腳本留下的碎片。由於變數不需要在 JSL 中聲明,並且全域命名空間是預設值,因此我相信在腳本頂部將所有變數初始化為空狀態絕對至關重要,以確保意外值不會侵入我的腳本,從而導致混亂和混亂。
當然,把名稱預設為此處(1);位於曾經編寫的每個 JSL 腳本的頂部,無處不在,始終如此,除非該腳本需要出於某種奇怪的原因使用全域名稱空間。即使在這種情況下,我覺得最好將預設命名空間設為 Local 並明確使用將所有全域變數引用為全域命名空間::全域名稱句法。因此,如果預設全域命名空間對於向後相容性確實是必要的,那麼我們應該可以選擇讓腳本編輯器始終插入名稱預設為此處(1);在所有新腳本的頂部,而不是要求編碼人員每次都記住並鍵入它。
即使採取了這些預防措施,我有時仍然會遇到發生碰撞的邊緣情況。例如,求和和產品函數包含一個名為的隱式變數我預設情況下。當在我已經設定預設本地命名空間的腳本內部使用時,這很好。但是列公式呢?我通常不會將列公式視為腳本,儘管它們正是如此。我使用 GUI 公式編輯器以圖形方式編輯它們。我從來沒有想過。
嗯,我第一次使用求和在列公式中,我還碰巧運行了一個表腳本,其中我忘記設定本地命名空間,其中我使用了為了循環迭代器為我。毫不奇怪,這導致了混亂和混亂。應用程式變得無響應,陷入無限循環,我不得不終止該任務。然後我不得不再嘗試幾次,才終於意識到我犯了一個可怕的、難以理解的錯誤,這是由上帝設置的陷阱所煽動的。求和是有害的全球性的我迭代器。長話短說,現在即使在列公式中,我也雙擊腳本編輯器並插入名稱預設為此處(1); 。沒有它,任何腳本都是不安全的。