共用方式為


將相依性新增至組態相依數據

*Switch/*Case 指示詞會使數據依賴於使用 *Feature/*Option 指示詞所定義的參數。 *Switch construct 的建構標記會為定義於 *Feature construct 的其中一個參數命名。 *Switch 構造的標籤對參數的引用,可能在其透過 *Feature 構造的定義之前。

*Switch 建構的主體包含數個 *Case 建構和可選的 *Default 建構。 其他子專案不能出現在 *Switch 建構中。 *Case 建構的標記會命名在 *Option 建構中所定義的允許值之一,此值對應於 *Switch 建構中所命名的參數。 建構標記不適用於*Default 建構。

*Switch 建構可以顯示為任何其他建構中的子專案,不同之處在於 *Switch 建構不能是另一個 *Switch 建構的子系。 *Case 建構的主體可以包含任何 GDL 專案,但 *Case 建構不能是 *Feature*Default 建構的上階。

*Switch/*Case 指令的運作方式與 C 語言中相同名稱的結構非常類似。 任何 *Case 建構的內容(其建構標記在組態中命名為 *Switch 建構所命名的參數目前值或狀態)都允許出現在快照中。 否則,解析器會防止 *Case 建構中包含的條目出現在快照中。

附注 不同於 C 版的 *Switch/*Case,GDL 不需要使用 break 語句來防止在 *Case 結構結束後繼續執行。

如果省略*Case 建構的主體(也就是,*Case 顯示為屬性而非建構),則會使用下一個 *Case*Default 建構的主體。 此行為再次類似於 C 語言 Switch/Case的行為。 如果 *預設 建構存在,則所有 *Case 項目之後,它必須最後出現。

如果參數允許 PICKMANY,則多個 *Case 建構的內容可能會出現在快照中。 這種情況可能會導致相同建構或屬性的多個定義。 這些多重定義的處理方式,就如同它們在 GDL 檔案中任何 *Switch/*Case 建構之外明確出現時的處理一樣。 如果多個 *Case 結構共用相同的主體,且在配置中多個被命名時,主體的內容只會顯示一次。

如果在組態中未命名任何 *Case 建構,則會使用 *Default 建構的內容。 如果未定義任何 *Default 建構,則會從快照集排除整個 *Switch/*Case 建構及其所有子代專案。

如果定義多個同層級 *Switch/*Case 建構,則每個建構都會獨立評估。 同層級建構的合併不適用於 *Switch/*Case 建構。

*Switch*Construct 指示詞永遠不會出現在快照中,因此,在快照中,*Case建構的子專案會成為 *Switch 建構父系的子專案。

在下列程式代碼範例中,已定義 Today 參數,以表示一周的天數。 範例中顯示兩個兄弟 *Switch/ *Case 結構,兩者會被獨立評估。

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

如果組態指定 Today: Saturday,快照集將會包含下列程序代碼。

*Schedule:
{
 *Eat: Breakfast, Dinner
  *ToDo: Ballgame
}

如果組態指定 Today: Wednesday,快照集將會包含下列程序代碼。

*Schedule:
{
  *Eat: Lunch
  *ToDo: FixBugs
}

如果組態指定 Today: Tuesday,快照集將會包含下列程序代碼。

*Schedule:
{
  *ToDo: FixBugs
}

下列程式代碼範例顯示兩個巢狀結構 *Switch/*Case 構造。

*Schedule:
{
  *Switch: Today
  {
    *Case: Sunday
    {
      *Switch: Weather
      {
        *Case: Sunny
        {
            *ToDo: Garden
        }
        *Case: Cloudy
        {
            *ToDo: Laundry
        }
      }
    }
    *Case: Saturday
    {
      *ToDo: Ballgame
    }
      *Default:
      {
        *ToDo: FixBugs
      }
    }
}