EGL 式内の名前は、次のいずれかを参照することができます。
- パラメーター
- 変数
- フィールド
- 関数
- パーツ (名前が修飾されている場合)
式の存在する位置 (その式が代入文、関数呼び出し、または他の位置にあるかどうか) に関係なく、ネーム解決のプロセスは同じです。 パーツ名の解決に関する規則は異なります。EGL パーツの解決規則を参照してください。
式内の名前を解決するため、EGL は以下の宣言を順番に参照します。
- ローカル変数およびパラメーター。関数内で宣言された変数です。参照対象には、関数のパラメーター・リスト、すべてのレコード変数名 (これらのレコード内のフィールド名を除く) が含まれます。このカテゴリーでは、重複名は禁止されています。
- ローカル I/O オブジェクト。関数に特定した入出力オブジェクトとその他のフィールドです。入出力オブジェクトには、get 文で参照される SQL レコードの配列などが含まれます。同じレベルでは、関数にパラメーターとして宣言されたり渡されるレコード変数内のフィールドがあります。
関数レベルで宣言されたレコード変数は、ステップ 1 にあります。
プログラム・レベルで宣言されたレコード変数は、このステップにあります。
このカテゴリー内では、名前の重複は許可されています。
例えば、2 つのレコード変数が同じ CustomerRecord 定義を基にしており、それぞれが customerNumber フィールドを持っている場合などです。この場合、あいまいさを避けるために、名前 customerNumber をレコード変数の名前で修飾します。
別の例として、プログラム・レベルのレコード変数、および同じ名前の関数レベルのフィールドがあるとします。
この場合は、以下のアクションを 1 つ以上実行します。
- キーワード this を使用してプログラム・レベルのレコード変数の名前を修飾する。
- allowUnqualifiedItemReferences プロパティーを YES に設定する。
- フィールドが含まれる DataTable、フォーム、または構造化レコードの名前でそのフィールドを修飾する。
非構造化レコード内のフィールド名は、レコード名で修飾する必要があります。
- プログラム変数。プログラム・レベルで宣言された変数です。
これらには、パラメーター・リスト (呼び出し先プログラムの場合)、すべてのレコード変数名 (これらのレコード内のフィールド名を除く) が含まれます。このカテゴリーでは、重複名は禁止されています。
- フォーム名。これらのフォーム名は、以下のいずれかの方法で宣言されます。
- use 宣言。
- inputForm プロパティーで指定。
- プログラムのパラメーター・リスト内で宣言。
- プログラム内の任意の関数にあるいずれかの入出力文で宣言。
use 宣言が FormGroup を参照する時、EGL は、グループ内のすべてのフォーム名を参照します。このカテゴリーでは、重複名は禁止されています。
- データ・テーブル名。EGL は、use 宣言内のデータ・テーブル名を参照します。
このカテゴリーでは、重複名は禁止されています。
- フィールド。EGL は、今の時点で、手順 3 から 5 のレコード、フォーム、データ・テーブル内のすべてのフィールドを参照します。あいまいさを避けるため、このカテゴリー内の重複名は修飾されます。
- ライブラリー変数。use 宣言内で指定したユーザー・ライブラリー内の変数です。このカテゴリー内の重複名は、ライブラリーの名前で修飾する必要があります。
- システム変数。最後に EGL は、EGL システム・ライブラリー内の変数を参照します。
このカテゴリー内には重複名はありません。