将依赖项添加到配置相关的数据

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