scope:nameという形式のスコープを使用することにより、名前を解決する場所を指定できます。ここで、scopeは名前の解決方法を示します。たとえば、here:nameは、名前がローカルで解決されるべきであることを意味します。Names Default To Hereモードを使用すると、here:nameはnameと等価です。スコープは名前の参照方法を指示します。
scope:name
•
|
解決ルールを示すもの。たとえば、here:xは、xがスクリプトにローカルな名前として解決されるべきであることを意味します。Global:xは、xがグローバル名として解決されるべきであることを意味します。
|
•
|
•
|
•
|
独自に作成した名前空間の名前。たとえば、myNamespace:b。ここで、myNamespaceは作成した名前空間。"myNamespace":bも等価です。詳細については、第 “名前空間”を参照してください。
|
以下の例は、計算式を含んだ列の適用範囲の指定方法を示しています。スクリプトの中で、xはグローバル変数、ローカル変数、列名として使用されています。
最初のスクリプトでは、列名xは適用範囲が指定されていません。2番目の列内の計算式は、列xの値を100倍するものです。この場合、列の値は100、200、300という結果になります。
::x = 5;
New Table( "テスト",
New Column( "x", Values( [1, 2, 3] ) ),
New Column( "y", Formula( 100 * x ) ),
);
::x = 5;
New Table( "テスト",
New Column( "x", Values( [1, 2, 3] ) ),
New Column( "y", Formula( Local( {x = 500}, x + 50 ) ) ),
);
JMPビルトイン関数。たとえば、Builtin:Sqrt()。名前は、JMP環境全体で共有されます。
|
|
Names Default to Here(1)内に名前空間ブロックを提供する。複数のスクリプトが同じルート名前空間から実行された場合(たとえば、スクリプトが同じ名前の変数を持つ2つのボタンスクリプトを実行する場合など)、名前の競合を防ぐには、Local Here()を使用します。引数には任意の有効なJSL式を使用できます。
|
|
この例は、Windowスコープを使って、実行中に情報を渡します。変数xおよびyの適用範囲をウィンドウに指定することで、xとyはデータテーブルなどの他のコンテキストに適用されなくなります。変数xおよびyは、指定のWindow環境内だけで作成および使用されます。Windowスコープは、Local()を使用するのと似ていますが、それより便利です。なぜなら、Local()は使用できる範囲が限られているからです。
New Window( "例",
window:gx = 20;
window:gy = 50;
Graph Box(
Frame Size( 200, 200 ),
Handle(
window:gx,
window:gy,
Function( {x, y},
window:gx = x;
window:gy = y;
)
);
Circle( {0, 0}, Sqrt( window:gx * window:gx + window:gy * window:gy ) );
);
);
図8.1 現在のウィンドウ名前空間の例
この例は、Hereスコープを使い、同じスクリプトによって作成されたウィンドウ間で情報を渡します。Here:を使って変数の適用範囲を指定する際、Names Default To Here()がオンである必要はありません。Here:スコープは常に使用できます。
「起動」ウィンドウがユーザに2つの値を入力するよう求めます。その2つの値が「結果」ウィンドウに渡され、それらの値を使って関数がグラフ化されます。「起動」ウィンドウは、aBoxとbBoxの適用範囲をそのウィンドウに限定します。基本的に、それらの変数(Number Edit Boxesへの参照)は「起動」ウィンドウ内にのみ存在し、「結果」ウィンドウでは使用できません。その後、2つのボックスの値がHereに範囲指定された変数内にコピーされ、このスクリプトによって作成された両方のウィンドウで使用可能となります。
launchWin = New Window( "起動",
<<Modal,
V List Box(
Lineup Box( N Col( 2 ), Spacing( 10 ),
Text Box( "a" ),
window:aBox = Number Edit Box( 50 ),
Text Box( "b" ),
window:bBox = Number Edit Box( 20 ),
),
Lineup Box( N Col( 2 ), Spacing( 20 ),
Button Box( "OK",
// ウィンドウを閉じる前に値をコピーする
here:a = window:aBox << Get;
here:b = window:bBox << Get;
),
Button Box( "キャンセル", Throw( 1 ) )
),
)
);
New Window( "結果",
Graph Box( Y Function( here:a + here:b * Sin( x / 30 ), x ) )
);
図8.2 起動と結果