Freigeben über


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
      }
    }
}