Condividi tramite


Aggiunta di dipendenze ai dati Configuration-Dependent

Le direttive *Switch/*Case rendono i dati dipendenti dai parametri definiti usando le direttive *Feature/*Option . Il tag costrutto del costrutto *Switch assegna uno dei parametri definiti in un costrutto *Feature . Il riferimento di un parametro tramite il tag costrutto del costrutto *Switch potrebbe precederne la definizione tramite il costrutto *Feature .

Il corpo di un costrutto *Switch contiene un numero di costrutti *Case e un costrutto *predefinito facoltativo. Nessun'altra voce figlio può essere visualizzata all'interno del costrutto *Switch . Il tag costrutto del costrutto *Case assegna uno dei valori consentiti definiti in un costrutto *Option che corrisponde al parametro denominato nel costrutto *Switch . Il tag costrutto non viene usato per il costrutto*predefinito .

* I costrutti switch possono essere visualizzati come voci figlio all'interno di qualsiasi altro costrutto, ad eccezione del fatto che un costrutto *Switch non può essere figlio di un altro costrutto *Switch . Il corpo di un costrutto *Case può contenere qualsiasi voce GDL, ad eccezione del costrutto *Case non può essere il predecessore di un costrutto *Feature o *Default .

Le direttive *Switch/*Case funzionano in modo molto simile ai costrutti del linguaggio C con lo stesso nome. Il contenuto di qualsiasi costrutto *Case (il cui tag costrutto è denominato nella configurazione come valore o stato corrente del parametro denominato dal costrutto *Switch ) può essere visualizzato nello snapshot. In caso contrario, il parser impedisce la visualizzazione delle voci contenute nel costrutto *Case nello snapshot.

Nota A differenza della versione C di *Switch/*Case, GDL non richiede un'istruzione di interruzione per interrompere l'esecuzione dal continuare oltre la fine del costrutto *Case .

Se il corpo di un costrutto *Case viene omesso ,ovvero *Case viene visualizzato come attributo anziché come costrutto), verrà usato il corpo del successivo costrutto *Case o *Default . Questo comportamento è di nuovo simile al comportamento nel caso switchcase del linguaggio / C. Se il costrutto *predefinito è presente, deve essere visualizzato per ultimo, dopo tutte le voci *Case .

Se il parametro consente PICKMANY, il contenuto di più costrutti *Case può essere visualizzato nello snapshot. Questa situazione può portare a più definizioni dello stesso costrutto o attributo. Tali definizioni vengono gestite esattamente come se vengano visualizzate in modo esplicito nel file GDL all'esterno di qualsiasi costrutto *Switch/*Case . Se diversi costrutti *Case condividono lo stesso corpo e più di uno viene denominato nella configurazione, il contenuto del corpo verrà visualizzato una sola volta.

Se nessuno dei costrutti *Case è denominato nella configurazione, viene usato il contenuto del costrutto *predefinito . Se non viene definito alcun costrutto *predefinito , l'intero costrutto *Switch/*Case e tutte le relative voci discendenti vengono escluse dallo snapshot.

Se vengono definiti più costrutti di pari livello *Switch/*Case , ognuno viene valutato indipendentemente dall'altro. L'unione di costrutti di pari livello non si applica ai costrutti *Switch/*Case .

Le direttive *Switch e *Construct non vengono mai visualizzate nello snapshot, quindi nello snapshot le voci figlio del costrutto *Casevengono visualizzate come voci figlio del padre del costrutto *Switch .

Nell'esempio di codice seguente viene definito un parametro Today per richiedere giorni della settimana. L'esempio mostra due costrutti *Switch/*Case di pari livello. Entrambi verranno valutati in modo indipendente.

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

Se la configurazione specifica Today: Saturday, lo snapshot conterrà il codice seguente.

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

Se la configurazione specifica Today: Wednesday, lo snapshot conterrà il codice seguente.

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

Se la configurazione specifica Today: Tuesday, lo snapshot conterrà il codice seguente.

*Schedule:
{
  *ToDo: FixBugs
}

L'esempio di codice seguente mostra due costrutti *Switch/*Case annidati.

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