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.

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.

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)

Exemples

Voir aussi