JMP 使用全局命名空間作為任何新腳本的默認命名空間,指定“本地”命名空間的方法是 Names Default to Here(1) 命令。 我的問題是這樣的,當我包含一個頂部名稱默認為 Here(1) 的文件時,它將從子腳本中引入名稱/變量。 但是,如果我定義
include("filepath/name.ext", << New Context, << NamesDefaultToHere) 它將保持命名空間分開.. 這背後的原因是什麼? 似乎應該做同樣的事情? 由於我使用的是 Include 語句,它是否假設我想從子腳本中吸收名稱?
即使 NamesDefaultToHere(1) 在腳本 B 中,下面的設置也會返回 x = 10
腳本A
x = 5;
include("filepath/script_B.jsl");
show(x);腳本B
namesDefaultToHere(1);
x = 10;
雖然這個返回 x = 5,因為我在 include 語句中具有名稱DefaultToHere
腳本A
x = 5;
include("filepath/script_B.jsl", << newContext, <<NAMESDEFAULTTOHERE></NAMESDEFAULTTOHERE>腳本B
namesDefaultToHere(1);
x = 10
@drewfoglia和@EvanMcCorkle在 2019 年 Tuscon 探索峰會上做了題為“提高效率和可重複性的基本腳本:少做多做 (2019-US-TUT-290)其中討論了這個主題。
其中一張幻燈片 (22) 提供了有關 Names Default to Here 的誤解,其中之一是每個 JSL 文件都有自己的 Here 上下文。 如果每個腳本單獨運行,但當 JSL 文件 A 中包含 JSL 文件 B 時,B 共享 A 的 Here 上下文,則情況如此。
在第一個示例中,使用名稱解析規則,JMP 在 Here 命名空間中找到 X 並顯示值 10。
在第二個示例中,使用“新語境”正在創建一個運行腳本 B 的匿名命名空間。 在本例中,X 不是 Here 命名空間的一部分,因此顯示在 Global 命名空間中找到的值。