有効範囲内に、同時に同じ名前を 2 つ持つことはできません。
しかし、別のパーツからアクセス可能な識別子のほとんどは、論理的にコンテナーの内部にあるメモリー領域を参照します (Program のような、メインの論理パーツ)。
そのような場合、ドット構文を使用して、その識別子を格納しているコンテナーの名前で名前を修飾します。
この方法で、以下の識別子を修飾することができます。
- レコード内のフィールド
- 書式内のフィールド
- ライブラリー内の変数または関数
- パッケージ内のパーツ
例えば、変数
customerBalance が
myCustomer というレコード変数内にある場合、
コードでは、次のように、その変数をレコードのフィールドとして参照します。
myCustomer.customerBalance
同じ識別子が 2 つの有効範囲内にある場合、その識別子への非修飾参照は、すべて最もローカルな有効範囲への参照となります。修飾子を使用して、振る舞いをオーバーライドすることができます。ライブラリー
customerLib にアクセスするための
use 宣言のあるプログラムについて考えます。このプログラムとライブラリーは、それぞれが
getCustomer() という名前の関数を宣言しています。次のようにして、変数名を修飾することができます。
- プログラム内の関数が修飾子なしで getCustomer() を
呼び出す場合、EGL はローカル (プログラム) バージョンを呼び出します。
- 関数名をライブラリーの名前で修飾する場合、EGL はライブラリーから関数を呼び出します。
customerLib.getCustomer();
- パーツ名にパッケージ名 (customerPackage など) を前書きする場合、パーツを import 文中で参照していなくても、EGL は別のパッケージからライブラリーやデータ・テーブルを呼び出すことができます。
customerPackage.customerLib.getCustomer();
パッケージ名は常に論理パーツ名を修飾し、変数、定数、関数名の名前の直前に置くことはできません。
ローカル ID がデータ・テーブルまたはライブラリーの存在するパッケージと異なるパッケージ内にある場合は、ローカル ID をデータ・テーブル名またはライブラリー名と同じものにすることができます。データ・テーブル名またはライブラリー名を参照するには、パッケージ名を組み込みます。
詳しくは、式におけるネーム解決を参照してください。