Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

upvar et uplevel?

24 views
Skip to first unread message

Patrice

unread,
Dec 18, 2011, 7:27:25 AM12/18/11
to
Bonjour,

je cherche à comprendre la syntaxe des instructions upvar et uplevel. Je ne
comprends rien à la traduction littérale d'anglais en français de ce qui est
dit sur http://wfr.tcl.tk/130 ; si une âme charitable pouvait m'expliquer en
français compréhensible avec un ou deux exemples simples, je lui en saurai
très reconnaissant.

N.B. J'ai seulement compris que upvar permettait de simuler un passage de
variable par adresse (comme dans Pascal quand on mettait var dans la ligne
de définition d'une fonction). Exemple:

upvar 1 $lname _list dans le corps d'une fonction permet de faire que la
variable _list référencie le même contenu que la variable dont le nom est
contenu dans la chaîne $lname. J'ai bon? Que signifie le 1 dans ce cas là?

Merci à tous,

PC

oc_forums

unread,
Dec 18, 2011, 8:50:10 AM12/18/11
to
Bonjour,

Dans

proc add2 name {
upvar $name x
set x [[expr $x+2]]
}

La commande "upvar" définit la variable x comme une copie au niveau local de la variable dont le nom est contenu dans "name" et qui provient du niveau supérieur.

Donc :

set nombre 2
add2 nombre

--> nombre = 4

"uplevel" s'applique à un script, un équivalent pourrait être : uplevel { set name [[expr $name+2]] }

Pour "uplevel" et "upvar", il est possible d'indiquer par un argument le nombre de niveaux séparant une variable externe d'une variable locale qui la représente.

A deux niveaux de distance, on écrit : upvar 2 $name x

Evidemment, pour ajouter 2 à un nombre, il y a plus simple !! Mais l'avantage est d'éviter d'utiliser une variable globale.

(PS: pour des explications claires sur le fonctionnement de Tcl ( dont ces lignes sont tirées), voir le livre de Bernard Desgraupes.)

O.

Kroc

unread,
Dec 19, 2011, 3:20:48 AM12/19/11
to
On 18 déc, 14:50, oc_forums <oliviercolin...@gmail.com> wrote:
> .../...
>        set x [[expr $x+2]]
> .../...

Attention : il y a des crochets en trop là, la bonne syntaxe c'est :

 set x [expr {$x+2}]

et il faut bien comprendre que la variable passée en argument doit
exister au niveau supérieur pour que add2 fonctionne.

Le principe d'upvar est donc de lier une variable existante d'un
niveau supérieur à une nouvelle variable locale.

Pour bien comprendre tout ça, tu peux te référer à cette page sur les
contextes d'exécution : http://wfr.tcl.tk/977

Ce qu'on peut retenir d'upvar et d'uplevel, c'est que si on ne
comprend pas à quoi ils servent, c'est probablement qu'on n'en a pas
besoin. ;^)

--
David Zolli

oc_forums

unread,
Dec 19, 2011, 11:07:50 AM12/19/11
to
> Attention : il y a des crochets en trop là, la bonne syntaxe c'est..

Damned !! Mon correcteur syntaxique (écrit en Tcl) de Copié/Collé n'a pas fonctionné ;-) !

Merci, je n'avais pas pas fait attention.

O.

Patrice

unread,
Dec 22, 2011, 5:29:53 AM12/22/11
to
Bon merci à tous pour vos explications et passez de bonnes fêtes de fin
d'année,

PC


0 new messages