uplevel Commandes Internes Tcl
NOM
uplevel - Execute 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é 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 la que 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 etait 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. Egalement,
uplevel #0 évalue un script au premier plan dans le namespace le plus externe (le namespace global )
VOIR EGALEMENT