Table des matières
uplevel
Exécute un script dans un cadre de pile différent
Syntaxe
uplevel ?level? arg ?arg ...?
Description
Tous les arguments arg sont concaténés comme si ils avait été transmis à concat; le résultat est alors évalué dans le contexte de variable indiqué par level. uplevel retourne le résultat de cette évaluation.
- Si level est un entier alors cela donne la distance (au-dessus de la pile d'appel de la fonction) à franchir avant l'exécution de la commande.
- Si level consiste en # suivi par un nombre alors le nombre donne un numéro absolu de niveau.
- Si level est omis alors il est par défaut de 1
level ne peut pas avoir la valeur par défaut si le premier argument command commence avec un chiffre ou un #.
Par exemple, supposez que la fonction a a été appelée au premier plan, et qu'elle a appelé b, et que b appelé c. Supposez que c appelle la commande uplevel.
- Si level est 1 ou #2 ou omis, alors la commande sera exécutée dans le contexte de variable de b
- Si level est 2 ou #1 alors la commande sera exécutée dans le contexte de variable de a.
- Si level est 3 ou #0 alors la commande sera exécutée au premier plan (seulement les variables globales seront visibles).
La commande uplevel cause la disparition de la fonction appelante de la pile d'appel pendant que la commande est exécutée. Dans l'exemple ci-dessus, supposez que c appelle la commande uplevel 1 {set x 43; d} où d est une autre fonction Tcl. La commande set modifiera la variable x dans le contexte de b, et d s'exécutera au niveau 3, comme si elle était appelée de b. Si elle exécute ensuite la commande uplevel {set x 42} alors la commande set modifiera la même variable x dans le contexte de b: la fonction c n'apparait pas être sur la pile d'appel quand d s'exécute. La commande info level peut être employée pour obtenir le niveau de la fonction courante.
uplevel rend possible l'implémentation de nouvelles structures de contrôle comme fonctions Tcl (par exemple, uplevel pourrait être utilisée pour implémenter la construction while comme fonction Tcl).
namespace eval est une autre façon (outre l'appel de fonction) de modifier le contexte de nom Tcl. Elle ajoute un cadre d'appel à la pile pour représenter le contexte namespace. Ceci signifie que chaque commande namespace eval compte comme un autre niveau d'appel pour les commandes uplevel et upvar. Par exemple, info level 1 renverra une liste décrivant une commande qui est soit l'appel de fonction le plus externe ou la commande namespace eval la plus externe. Également, uplevel #0 évalue un script au premier plan dans le namespace le plus externe (le namespace global)