JMP は、新しいスクリプトのデフォルトの名前空間としてグローバル名前空間を使用します。「ローカル」名前空間を指定する方法は、Names Default to Here(1) コマンドです。 私の質問は、Names Default to 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 ステートメントに namesDefaultToHere があったためです。
スクリプトA
x = 5;
include("filepath/script_B.jsl", << newContext, <<NAMESDEFAULTTOHERE></NAMESDEFAULTTOHERE>スクリプトB
namesDefaultToHere(1);
x = 10
@drewfogliaと@EvanMcorkle 2019年タスコンのディスカバリーサミットで、「効率と再現性のための基本的なスクリプト作成: より少ない作業でより多くの作業を行う (2019-US-TUT-290)このトピックについて説明しています。
スライドの 1 つ (22) では、名前のデフォルトの Here に関する誤解が示されています。その 1 つは、各 JSL ファイルに独自の Here コンテキストがあるというものです。 これは、各スクリプトが個別に実行される場合に当てはまりますが、JSL ファイル B を JSL ファイル A に含める場合、B は A の Here コンテキストを共有します。
最初の例では、名前解決のルール, JMP は Here 名前空間で X を見つけ、値 10 を表示します。
2 番目の例では、 「新しい文脈」スクリプト B が実行される匿名名前空間を作成しています。 この場合、X は Here 名前空間の一部ではないため、Global 名前空間で見つかった値が表示されます。