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( :Name("体重(ポンド)") << Get As Matrix ); // "体重(ポンド)"は列名として解決される
Close( dt, NoSave );
Show( :Name("体重(ポンド)") << Get As Matrix ); // "体重(ポンド)"は解決されない
dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); // データテーブルが再度開く
Show( :Name("体重(ポンド)") << 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 ); // 最初のデータテーブルへの参照はもう存在しない
以下の節で、データテーブルの列の名前がどのように解決されるかを説明します。名前の解決について詳しくは、高度な適用範囲指定と名前空間を参照してください。