スクリプトガイド > JSLの構成要素 > 名前解決のルール > 名前を解決するためのルール
公開日: 09/19/2023

名前を解決するためのルール

JMPは名前の解決を使ってオブジェクト名を解釈します。適用範囲が明示されていない名前には、次の規則が順に適用されます。

1. 変数の後ろに1組の丸括弧 ( ) が付いている場合、関数として検索します。

2. 変数の接頭部に:スコープ演算子が付いている場合、または明示的なデータテーブルへの参照がある場合、データテーブル列またはテーブル変数として検索します。

3. 変数の接頭部に::スコープ演算子が付いている場合、グローバル変数として検索します。

4. 変数が明示的なスコープ参照(group:vowelなど)の場合は、ユーザ定義のgroup名前空間内を検索します。

5. 変数がLocal関数またはParameter関数の中にある場合は、ローカル変数として検索します。入れ子になっている場合には、関数の呼び出しの終わりまでそれを繰り返します。

6. 変数がユーザ定義の関数やメソッドの中にある場合は、関数、メソッドの引数またはローカル変数として検索します。

7. 現在のスコープおよびその親スコープの中を検索します。Hereスコープに到達するまで繰り返します。

8. Hereスコープ内の変数として検索します。

9. グローバル変数として検索します。

10. スクリプトの冒頭にNames Default to Here(1)がある場合は、検索を中止します。そのスコープはローカルです。

11. データテーブル列またはテーブル変数として検索します。列は、テーブル変数より優先されます。

12. 演算子またはプラットフォーム名(一変量の分布、二変量、チャートなど)として検索します。

13. 名前が見つからなかった場合

名前が参照されている場合、ログにエラーを出力します。

名前が割り当ての対象(L-value)として使われている場合は、次のことを行います。

変数の接頭部に::スコープ演算子が付いている場合、グローバル変数を作成して使用します。

変数が明示的なスコープ参照の場合、指定された名前空間またはスコープの中に変数を作成して使用します。

スクリプトの冒頭にNames Default to Here(0)がある場合は、グローバル変数を作成します。

スクリプトの冒頭にNames Default to Here(1)がある場合は、Here名前空間に変数を作成します。

例外

一部の名前は、データテーブル、データ列、プラットフォームなどのオブジェクトを参照する変数であり、値の取得や設定には使用されません。これらの名前は解決されず、渡されます(文字どおり解釈される)。

関数の定義、列計算式、および「非線形回帰」プラットフォームの計算式において、スコープは列内のすべての行で同じです。

名前が、閉じているデータテーブル内の列を直接参照している場合、その名前はテーブルが再度開いたときに該当の列に対して解決されます。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Show( :"体重(ポンド)"n << Get As Matrix ); // "体重(ポンド)"は列名として解決される
Close( dt, NoSave );
Show( :"体重(ポンド)"n << Get As Matrix );  // "体重(ポンド)"は解決されない
dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); // データテーブルが再度開く
Show( :"体重(ポンド)"n << Get As Matrix ); // "体重(ポンド)"は列名として解決される

ただし、次の例では、変数をデータテーブルの2番目のインスタンスとして解決しません。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
col = Column( dt, 5); // colはColumn( "体重(ポンド)" );
Close( dt, NoSave );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); // データテーブルが再度開く
Show( col << Get As Matrix ); // 最初のデータテーブルへの参照はもう存在しない

以下の節で、データテーブルの列の名前がどのように解決されるかを説明します。名前の解決について詳しくは、高度な適用範囲指定と名前空間を参照してください。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).