将依赖项添加到配置相关的数据
*Switch/*Case 指令使数据依赖于使用 *Feature/*Option 指令定义的参数。 *Switch 构造的构造标记命名在功能构造中定义的参数之一。 *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 语言 Switch/Case 中的行为。 如果 存在 *Default 构造,则它必须显示在所有 *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
}
}
}