將相依性新增至Configuration-Dependent資料
*Switch/*Case指示詞會讓資料取決於使用*Feature/*Option指示詞所定義的參數。 *Switch建構的建構標記會命名*Feature建構中定義的其中一個參數。 透過 *Switch 建構的建構標記,參數的參考可能會在其定義之前透過 *Feature 建構。
*Switch建構的主體包含數個*Case建構和選擇性的 *Default建構。 *Switch建構中不能顯示其他子專案。 *Case建構的建構標記會命名*Option建構中所定義的其中一個允許值,這些值會對應至*Switch建構中名為 的參數。 建構標記不會用於*Default 建構。
*Switch 建構可以顯示為任何其他建構中的子專案,但 *Switch 建構不能是另一個 *Switch 建構的子系。 *Case建構的主體可以包含任何 GDL 專案,但*Case建構不能是*Feature或*Default建構的上階。
*Switch/*Case指示詞的運作方式與相同名稱的 C 語言建構非常類似。 任何 *Case 建構的內容 (其建構標記在組態中命名為 *Switch 建構) 所命名的參數目前值或狀態,都允許出現在快照集中。 否則,剖析器會防止 *Case 建構中包含的專案出現在快照集中。
注意與*Switch/*Case的 C 版本不同,GDL 不需要 break 語句來停止執行,而無法繼續超過*Case建構的結尾。
如果省略*Case 建構的主體 (, *Case 會顯示為屬性而非建構) ,則會使用下一個 *Case 或 *Default 建構的主體。 此行為同樣類似于 C 語言切換/案例中的行為。 如果 出現 *Default 建構,它必須出現在所有 *Case 專案之後。
如果參數允許 PICKMANY,則多個 *Case 建構的內容可以出現在快照中。 這種情況可能會導致相同建構或屬性的多個定義。 這類多個定義會處理,就像它們明確出現在任何*Switch/*Case建構以外的 GDL 檔案一樣。 如果數 個 *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
}
}
}