Hinzufügen von Abhängigkeiten zu den Configuration-Dependent Daten
Die *Switch/*Case-Direktiven machen Daten abhängig von den Parametern, die mithilfe der *Feature/*Option-Direktiven definiert werden. Das Konstrukttag des *Switch-Konstrukts benennt einen der Parameter, die in einem *Feature-Konstrukt definiert sind. Der Verweis eines Parameters durch das Konstrukttag des *Switch-Konstrukts kann seiner Definition durch das *Feature-Konstrukt vorangestellt werden.
Der Text eines *Switch-Konstrukts enthält eine Reihe von *Case-Konstrukten und ein optionales *Default-Konstrukt . Innerhalb des *Switch-Konstrukts können keine anderen untergeordneten Einträge angezeigt werden. Das Konstrukttag des *Case-Konstrukts benennt einen der zulässigen Werte, die in einem *Option-Konstrukt definiert sind und dem Parameter entsprechen, der im *Switch-Konstrukt benannt ist. Das Konstrukttag wird für das *Default-Konstrukt nicht verwendet.
*Switch-Konstrukte können als untergeordnete Einträge in jedem anderen Konstrukt angezeigt werden, mit der Ausnahme, dass ein *Switch-Konstrukt nicht das untergeordnete Element eines anderen *Switch-Konstrukts sein kann. Der Text eines *Case-Konstrukts kann alle GDL-Einträge enthalten, mit der Ausnahme, dass das *Case-Konstrukt nicht der Vorgänger eines *Feature- oder *Standardkonstrukts sein kann.
Die *Switch/*Case-Direktiven funktionieren sehr ähnlich wie die C-Sprachkonstrukte mit demselben Namen. Der Inhalt eines *Case-Konstrukts (dessen Konstrukttag in der Konfiguration als aktueller Wert oder Status des Parameters benannt ist, der vom *Switch-Konstrukt benannt wird) darf im Momentaufnahme angezeigt werden. Andernfalls verhindert der Parser, dass die Einträge, die im *Case-Konstrukt enthalten sind, im Momentaufnahme angezeigt werden.
Hinweis Im Gegensatz zur C-Version von *Switch/*Case benötigt GDL keine Break-Anweisung, um die Ausführung über das Ende des *Case-Konstrukts hinaus zu beenden.
Wenn der Text eines *Case-Konstrukts weggelassen wird (d. h. *Case wird als Attribut und nicht als Konstrukt angezeigt), wird der Text des nächsten *Case - oder *Default-Konstrukts verwendet. Dieses Verhalten ähnelt wiederum dem Verhalten in der C-Sprache Switch Case/. Wenn das *Default-Konstrukt vorhanden ist, muss es nach allen *Case-Einträgen zuletzt angezeigt werden.
Wenn der Parameter PICKMANY zulässt, kann der Inhalt mehrerer *Case-Konstrukte im Momentaufnahme angezeigt werden. Diese Situation kann zu mehreren Definitionen desselben Konstrukts oder Attributs führen. Solche mehrfachen Definitionen werden so behandelt, als ob sie explizit in der GDL-Datei außerhalb eines *Switch/*Case-Konstrukts angezeigt würden. Wenn mehrere *Case-Konstrukte denselben Text gemeinsam haben und mehrere in der Konfiguration benannt sind, wird der Inhalt des Textkörpers nur einmal angezeigt.
Wenn keines der *Case-Konstrukte in der Konfiguration benannt ist, wird der Inhalt des *Default-Konstrukts verwendet. Wenn kein *Default-Konstrukt definiert ist, werden das gesamte *Switch/*Case-Konstrukt und alle zugehörigen Nachfolgereinträge vom Momentaufnahme ausgeschlossen.
Wenn mehrere gleichgeordnete *Switch/*Case-Konstrukte definiert sind, wird jedes unabhängig vom anderen ausgewertet. Das Zusammenführen von gleichgeordneten Konstrukten gilt nicht für *Switch/*Case-Konstrukte .
Die *Switch- und *Construct-Direktiven werden in der Momentaufnahme nie angezeigt. Daher werden im Momentaufnahme die untergeordneten Einträge des *Case-Konstruktsals untergeordnete Einträge des übergeordneten *Switch-Konstrukts angezeigt.
Im folgenden Codebeispiel wird ein Today-Parameter so definiert, dass er Tage der Woche dauert. Das Beispiel zeigt zwei gleichgeordnete *Switch/*Case-Konstrukte ; beide werden unabhängig voneinander ausgewertet.
*Schedule:
{
*Switch: Today
{
*Case: Saturday
*Case: Sunday
{
*Eat: Breakfast, Dinner
}
*Case: Monday
*Case: Wednesday
*Case: Friday
{
*Eat: Lunch
}
}
*Switch: Today
{
*Case: Sunday
{
*ToDo: Laundry
}
*Case: Saturday
{
*ToDo: Ballgame
}
*Default:
{
*ToDo: FixBugs
}
}
}
Wenn die Konfiguration angibtToday: Saturday
, enthält die Momentaufnahme den folgenden Code.
*Schedule:
{
*Eat: Breakfast, Dinner
*ToDo: Ballgame
}
Wenn die Konfiguration angibtToday: Wednesday
, enthält die Momentaufnahme den folgenden Code.
*Schedule:
{
*Eat: Lunch
*ToDo: FixBugs
}
Wenn die Konfiguration angibtToday: Tuesday
, enthält die Momentaufnahme den folgenden Code.
*Schedule:
{
*ToDo: FixBugs
}
Das folgende Codebeispiel zeigt zwei geschachtelte *Switch/*Case-Konstrukte .
*Schedule:
{
*Switch: Today
{
*Case: Sunday
{
*Switch: Weather
{
*Case: Sunny
{
*ToDo: Garden
}
*Case: Cloudy
{
*ToDo: Laundry
}
}
}
*Case: Saturday
{
*ToDo: Ballgame
}
*Default:
{
*ToDo: FixBugs
}
}
}