動的な型と動的アクセス

EGL が、変数の内容へのアクセスを実行時にのみ検査できる場合、その変数は動的な型 です。実際には、以下のフィールドのいずれを参照するときも、 動的アクセスを実行しています。
この最後の場合では、フィールドの名前は、次の例のようにレコードの名前の後に大括弧で括られて表示されます。
myCustomer["customerName"]

この大括弧構文は、ANY 型変数または Dictionary とともに使用することができます。

ドット構文 (myRecord.myField など) を使用する式へのアクセスも 動的に行われます。EGL の振る舞いは以下の規則に従います。フィールド・アクセス式の左端のパーツ (ドットで区切られた一連の名前) が動的な型である場合、または ANY 型の別の式である場合、EGL は、後に続くどのフィールドにも動的アクセスを使用します。実際には、このことは、式に続くフィールドで EGL が 動的アクセスを使用するために、式が Dictionary の名前、非固定レコードの名前、または ANY 型変数の名前で始まる必要があることを意味します。

動的アクセスは、ANY 型変数が許可されるところでは常に許可されます。また、動的アクセスがある場合は常に、型は ANY です。

正しいコード生成のためにオペランドのデータ型を必要とする文 (I/O 文など) は、動的アクセス式をオペランドとして使用できません。

以下の例は、動的アクセスのさまざまな方法を示します。
// Dictionary の指定ポイントを定義
point Dictionary{x=1, y=1};

// ポイントのキー "x" にある値にアクセス
anInt = point["x"];

// 通常のデータ・アクセス構文を使用するアクセス・ポイント
anInt = point.x ;

// "x" の値を持つ変数を使用する X にアクセス
str String = "x";
anInt = point[ str ];

フィードバック