このバージョンのヘルプはこれ以降更新されません。最新のヘルプは https://www.jmp.com/support/help/ja/15.2   からご覧いただけます。


Names Default To Here()関数。シンプルなスクリプトであれば、このコマンドだけで十分です。詳細については、第 “Names Default To Here”を参照してください。
Names Default To Here( 1 );
Names Default To Hereモードがオンになっているスクリプトの中の非修飾の名前は、そのスクリプトだけに関連付けられます。ただし、名前はスクリプトが存続する限り、または、そのスクリプトによって作成されたオブジェクトやそのスクリプトを保持しているオブジェクトがアクティブである限り、存続します。特別な理由がない限り、プロダクション環境で使用するすべてのスクリプトは、Names Default To Here(1)で開始することをお勧めします。スクリプトがこのモードで非修飾の名前を使用する場合、名前はローカルの名前空間内で解決されます。
グローバル変数を参照するには、名前の適用範囲を明確にグローバル変数として指定します(たとえば::global_name)。データテーブル内の列を参照するには、名前の適用範囲を明確にデータテーブル列として指定します(たとえば:column_name)。
メモ: Names Default To Here( 1 )は、特定のスクリプトのモードを定義します。グローバルな定義ではありません。あるスクリプトでこのモードを有効にし、別のスクリプトでは無効にすることができます。デフォルトではオフに設定されています。
簡単なスクリプトを作成するだけなら、Names Default To Here(1)で十分です。
Local()は、スクリプト内の特定のコンテキストにだけローカルな適用範囲を作成し、相互に作用する関数のある長いスクリプトを含めることはできません。一方、Names Default To Here(1)は、スクリプト全体に対してローカルな適用範囲を作成できます。Local()では、ローカルブロックにローカルな変数をリストします。明示的にリストされていないものは、そのブロックに対してローカルにはなりません。
Local Here()Names Default to Here(1)をもつ名前空間ブロックを提供します。複数のスクリプトが同じルート名前空間から実行された場合(たとえば、スクリプトが同じ名前の変数を持つ2つのボタンスクリプトを実行する場合、または含まれているスクリプトがメインスクリプトから実行された場合など)、Local Here()を使用して名前の競合を防ぎます。
ローカルブロックには寿命があるのでLocal()は常に機能するとは限りませんが、Local Here()は呼び出し全体にわたって維持されます。
Names Default To Here( 1 );
 
x = 5;
y = 0;
 
Print( "Main, Before: x=" || Char( x ) || ", y=" || Char( y ) );
Include( "Inc1.jsl" );
Print( "Main, After: x=" || Char( x ) || ", y=" || Char( y ) );
Names Default To Here( 1 );
 
Local Here( // 変数はこのスクリプトのローカル
	x = 100;
	y = 100;
 
Print( "Inc1: x=" || Char( x ) || ", y=" || Char( y ) );
);
Print( "Inc1 outside: x=" || Char( x ) || ", y=" || Char( y ) );
"Main, Before: x=5, y=0" // Inc1.jslを実行する前に、Main.jslで定義
"Inc1 outside: x=5, y=0" // Inc1.jslから、Main.jslを参照
"Main, After: x=5, y=0" // Inc1.jslの実行後、Main.jslから
inc1.jslの変数xと変数yは「Local Here」名前空間にあるために、変化しないことに注意してください。
Names Default To Here()関数は、非修飾の名前付き変数参照の解決方法を決定します。here:var_nameを使って明示的に変数のスコープを指定すれば、Names Default To Here()のオン/オフに関わらず常に適用範囲で動作します。hereおよびその他の適用範囲については、第 “適用範囲が指定された名前”を参照してください。
Names Default To Hereモードを有効にすると、Hereというスコープが実行スクリプトに関連付けられます。Hereスコープには、作成された非修飾の名前付き変数のうち、割り当ての対象(L-value)であるものすべてが含まれます。JMP 8以前のバージョンでは、これらの変数は通常、グローバルスコープに置かれていました。Hereスコープを使うと、複数の実行スクリプト内の変数がお互いに分離され、名前の競合が回避されるので、変数名の管理やスクリプト作成が簡単になります。Globalスコープを使えば名前を共有できます。
このスクリプト例を一度に1行ずつ実行し、Names Default To Here()関数が変数名の解決にどのような変化をもたらすかを見てみましょう。
a = 1;
Names Default To Here( 1 );
a = 5;
Show( global:a, a, here:a );
1.
1行目を実行し、名前がa、値が1のグローバル変数を作成します。
2.
2行目を実行し、Names Default To Hereモードをオンにします。
3.
3行目を実行し、名前がa、値が5のローカル空間を作成します。この行は、グローバル変数aに割り当てられた値を変更しません
非修飾のahere:aと認識されます。Names Default To Here()がオンでない場合、aaという名前のグローバル変数と認識されます。
ただし、Show()関数内でglobal:aの代わりに::aを使用した場合、出力は若干異なります。
Show(::a, a, here:a);
ここでは、次のような定義の2つのスクリプトがあり、どちらもNames Default To Here()オフ(デフォルト設定)になっています。
a = 1; // スクリプト1
Show( a );
 
a = 3; // スクリプト2
Show( a );
3.
スクリプト1のshow(a);行のみを実行します。結果は次のとおりです。
変数aはグローバルで、スクリプト2によって最後に変更されたため、ログにはa = 3と表示されます。これは、JMP 9以降ではデフォルトの動作ですが、JMP 8以前のバージョンでは唯一可能な動作でした。
4.
では、スクリプトとも、Names Default To Here()をオンにしてみましょう。
Names Default To Here(1);
メモ: Names Default To Here()は、特定のスクリプトに対してローカルです。グローバル設定ではありません
7.
スクリプト1のShow( a ); 行のみを実行します。結果は次のとおりです。
変数aのコピーが各スクリプトに保持されるため、ログにはa = 1と表示されます。