CDL Iterator文とFOR ALL...INおよびWHEREキーワード
FOR ALL、INおよびWHEREキーワードは、イテレータ文をサポートしています。
FOR ALLおよびINキーワード
FOR ALLおよびINキーワードは、イテレータ文の2つの句を開始します。 INキーワードは、反復のソースを指定します。
ノート: IN句には、リテラル・コレクションまたはモデル・ノードの集合(OptionsOfなど)のみを含めることができます。 インスタンスが指定されていないため、特定のモデルのすべてのインスタンスで同じ反復が使用されます。
WHEREキーワード
WHEREキーワードは、WHERE基準に一致しない反復を排除するフィルタとして機能するイテレータ文の句を開始
FOR ALL IN and WHERE Clause using Node Attributes
の例では、WHERE句で指定された基準に子が存在するため、結果はオプションd
への貢献度のみになります。
ノート: WHERE句の条件式はstaticである必要があります。 WHERE句およびIN句でCOLLECT操作を使用する場合、オペランドはstaticである必要があります。
ノート: コンフィギュレータは、上位から下位の互換性ルールを評価し、AND演算子またはOR演算子の使用に基づいて式に優先度または優先度を与えません。 つまり、最初に入力したリレーションが評価され、次に2番目のリレーションが評価されます。
例
次の例では、結果はオプションd
への3つの貢献になります。
ADD &var TO d
FOR ALL &var IN {a, b, c};
次の例では、ユーザー定義属性UDA3
が5未満であるオプション・クラスa
の子が存在するため、数値機能d
への貢献度が最大になります。 この例は、中カッコで囲まれたコレクションも示しています(コレクション・リテラルを参照)。
例: ノード属性を使用するFOR ALL INおよびWHERE句
ADD &var.userAttrs["AG_name.NumAttr"]+ 10 TO d
FOR ALL &var IN {OptionsOf(a)}
WHERE &var.userAttrs["AG_name.UDA3"] < 5;
両方の例で、1つの文が1つ以上の制約またはコントリビューションに展開され、各文が明示的に繰り返されることはありません。 両方の例で、イテレータ変数は、累計ステートメントの左側にも関連付けることができます。