Поделиться через


Добавление зависимостей в данные Configuration-Dependent

Директивы *Switch/*Case зависят от параметров, определенных с помощью директив *Feature/*Option . Тег construct конструкции *Switch называет один из параметров, определенных в конструкции *Feature . Ссылка на параметр тегом construct конструкции *Switch может предшествовать его определению через конструкцию *Feature .

Текст конструкции *Switch содержит несколько конструкций *Case и необязательную конструкцию *Default . Другие дочерние записи не могут отображаться в конструкции *Switch . Тег construct конструкции *Case называет одно из допустимых значений, определенных в конструкции *Option , соответствующей параметру, именованному в конструкции *Switch . Тег construct не используется для конструкции*Default .

*Конструкции switch могут отображаться как дочерние записи в любой другой конструкции, за исключением того, что конструкция *Switch не может быть дочерним элементом другой конструкции *Switch . Текст конструкции *Case может содержать любые записи GDL, за исключением того, что конструкция *Case не может быть предком конструкции *Feature или *Default .

Директивы *Switch/*Case очень похожи на конструкции языка C с тем же именем. Содержимое любой конструкции *Case (тег конструкции которого в конфигурации называется текущим значением или состоянием параметра, именованного конструкцией *Switch) может отображаться в snapshot. В противном случае средство синтаксического анализа предотвращает появление записей, содержащихся в конструкции *Case, в snapshot.

Примечание В отличие от C-версии *Switch/*Case, GDL не требуется оператор break, чтобы остановить выполнение после конца конструкции *Case .

Если текст конструкции*Case опущен (т. е. *Case отображается как атрибут, а не конструкция), будет использоваться текст следующей конструкции *Case или *Default . Это поведение снова похоже на поведение в случае переключения/ языкаC. Если конструкция *Default присутствует, она должна отображаться последней после всех записей *Case .

Если параметр разрешает PICKMANY, содержимое нескольких конструкций *Case может отображаться в snapshot. Такая ситуация может привести к созданию нескольких определений одной конструкции или атрибута. Такие множественные определения обрабатываются так же, как если бы они явно отображались в GDL-файле за пределами любой конструкции *Switch/*Case . Если несколько конструкций *Case используют один и тот же текст и несколько имен в конфигурации, содержимое текста будет отображаться только один раз.

Если ни одна из конструкций *Case не называется в конфигурации, используется содержимое конструкции *Default . Если конструкция *Default не определена, вся конструкция *Switch/*Case и все ее потомки исключаются из snapshot.

Если определено несколько одноуровневых конструкций *Switch/*Case , каждая из них оценивается независимо от другой. Слияние одноуровневых конструкций не применяется к конструкциям *Switch/*Case .

Директивы *Switch и *Construct никогда не отображаются в snapshot, поэтому в snapshot дочерние записи конструкции *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значение , snapshot будет содержать следующий код.

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

Если в конфигурации указано Today: Wednesdayзначение , snapshot будет содержать следующий код.

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

Если в конфигурации указано Today: Tuesdayзначение , snapshot будет содержать следующий код.

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