Switch

From Base de connaissances eggdrops & TCL
Jump to: navigation, search

switch - Evalue un parmi plusieurs scripts, dépendant d'une valeur donnée

Syntaxe

switch ?options? string pattern body ?pattern body ...?
switch ?options? string {pattern body ?pattern body ...?}

Description

La commande switch compare son argument string à chacun des arguments pattern dans l'ordre. Dès qu'elle trouve un pattern qui correspond à string elle évalue les argument body suivants en les transmettant récursivement à l'interpréteur Tcl et retourne le résultat de cette évaluation . Si le dernier argument pattern est default alors il correspond à tout. Si aucun argument pattern correspond à string et qu'aucun défaut n'est donné, alors switch retourne une chaîne vide.

Si les arguments initiaux de switch commencent avec - alors ils sont traités comme des options. Les options suivantes sont couramment supportées:

  • -exact Utilise la correspondance exacte pendant la comparaison de string à un modèle C'est le défaut.
  • -glob Pendant la comparaison de string aux modèles, utilise une correspondance glob-style (ex. la même qu'implémentée par la commande string match).
  • -regexp Pendant la comparaison de string aux modèles, utilise la correspondance expression rationelle (comme décrit dans la page de référence[re_syntax]).
  • -- Marque la fin des options L'argument suivant sera traité comme string même s'il commence avec un -.

Deux syntaxes sont fournie pour les arguments pattern et body. Le premier utilise un argument séparé pour chacun des modèles et commandes; cette forme est pratique si des substitutions sont désirées sur un modèle ou une commande. La seconde forme place tous les modèles et les commandes ensemble dans un seul argument; l'argument doit avoir une structure de liste correcte, avec les éléments de la liste étant les modèles et les commandes. La seconde forme facilite la construction de commandes switch multi-ligne, puisque les accolades entourant la liste rendent inutile l'inclusion d'un antislash à la fin de chaque ligne. Comme les arguments pattern sont dans accolades dans la seconde forme, aucunes substitutions de commande ou de variable ne sont effectuée sur ceux-ci; cela rend le comportement de la seconde forme différent de la première forme dans certains cas.

Si un body est spécifié comme "-" cela signifie que le body du modèle suivant doit être aussi utilisé comme le corps pour ce modèle (si le modèle suivant a aussi un corps de "-" alors le corps qui est utilisé après, et ainsi de suite). Cette fonctionnalité rend possible de partager une seul body entre plusieurs modèles.

Attention à l'emplacement des commentaires dans les commandes switch Ils devront être placés seulement dans l'exécution du corps d'un des modèles, et pas mélangés avec les modèles.

Exemples

switch abc a - b {format 1} abc {format 2} default {format 3}

renverra 2,

switch -regexp aaab {
   ^a.*b$   -
   b {format 1}
   library {format 2}
   default {format 3}
}

renverra 1, et

switch xyz {
   a
      -
   b {
      # Placement Correct du Commentaire
      format 1
   }
   library {format 2}
   default {format 3}
}

renverra 3

Voir également

if, for, incr, while, foreach, break, continue, Conditions