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

aide sur {*}

0 views
Skip to first unread message

mou...@igbmc.u-strasbg.fr

unread,
Jan 28, 2008, 11:37:51 AM1/28/08
to
Bonjour a tous !

Quelqu'un peut il m'expliquer en quoi la nouvelle syntaxe {*} est
superieure a eval ?

- Dans le wiki, et dans le forum, une particularite de {*} mise en
avant est qu'il est plus "safe" qu'eval ? Je ne comprends pas ce que
ca veut dire ....

- Je ne pense pas que seule le changement d'ecriture de , par
exemple ,
destroy {*}[winfo children .]
a la place de
eval destroy [winfo children.]
soit une raison suffisante pour changer la syntaxe de Tcl.

Merci d'eclairer ma petite lanterne !!
lu- c

miguel

unread,
Jan 28, 2008, 11:58:33 AM1/28/08
to

(1) {*} est plus performant, mais ce n'est pas important ici

(2) choisissons un example un peu plus compliqué pour illustrer:
supposons que nous avons une commande dans $cmd, un premier argument
dans $arg1, un tas d'autres arguments dans $argLst, et un dernier
argument $argEnd. On pourrait faire
eval $cmd $arg1 $argLst $argEnd

Mais ceci causera une erreur si les valeurs de $cmd ou $arg1 ou $argEnd
contiennent des espaces. Ou un désastre si un clown quelconque écrit
set arg1 {[rm -rf ~]}

Ah, il faut protéger de l'expansion tout ce qui doit être pris tel-quel:
eval [list $cmd] [list $arg1] $argLst [list $argEnd]
ou bien
eval [list $cmd $arg1] $argLst [list $argEnd]

Hmmm, pas très joli cette histoire de "protéger tout ce qui doit
rester"; ne serait-ce pas mieux de marque ce qui doît être "expanded"? D'où:
$cmd $arg1 {*}$argLst $argEnd

L'idée centrale est: l'idiome avec eval présente un tas d'erreurs
faciles à commettre (écrire la première version), avec possiblement des
implications de sécurité (evaluation de choses qui ne devraient pas être
evaluées). Pas bon.

Donc, nouvel idiome qui permet de représenter ce que l'on veut
directement (exploser $argLst en plusieurs termes), au lieu de ce que
l'on avait jusque ici (exploser tous les arguments, sauf ceux qui son
protégés par [list]).

Miguel

mou...@igbmc.u-strasbg.fr

unread,
Jan 29, 2008, 2:49:17 AM1/29/08
to
Super ! Merci Miguel !

Je crois que ca vaudrait la peine que tu copies tel quel ta reponse
pour en faire une page wiki .... Je ne crois pas etre le seul non-
informaticien qui utilise Tcl/Tk et qui se pose ce genre de
questions !

Merci encore !
Luc

miguel

unread,
Jan 29, 2008, 6:31:46 AM1/29/08
to

Le wiki anglophone a une justification un peu différente
(http://wiki.tcl.tk/17158), provenant directement du TIP
(http://www.tcl.tk/cgi-bin/tct/tip/293.html,
http://www.tcl.tk/cgi-bin/tct/tip/157).

Le wiki francophone semble ne pas avoir de références à {*}! Quelqu'un
devrait s'y mettre, tout au moins avec des pointeurs à la page
anglophone, le TIP et peut-être cet échange?

Je le ferais moi-même, mais je semble avoir perdu mes droits (ou bien
oublié mon nom/pw :}). Ne pouvant pas le faire tout de suite, je crains
d'oublier.

Miguel

Eric Hassold

unread,
Jan 29, 2008, 6:41:01 AM1/29/08
to
miguel a écrit :

Bon, ca y est, droits retablis, tant que memoire est fraiche ;)

Eric

miguel

unread,
Jan 29, 2008, 6:56:28 AM1/29/08
to
Eric Hassold wrote:
> miguel a écrit :

>> Je le ferais moi-même, mais je semble avoir perdu mes droits (ou bien
>> oublié mon nom/pw :}). Ne pouvant pas le faire tout de suite, je
>> crains d'oublier.
>
> Bon, ca y est, droits retablis, tant que memoire est fraiche ;)
>
> Eric

Zut alors - j'espérais bien qu'un autre s'y mette, mais t'es trop rapide.

Merci Eric. Pour quitter ma dette, http://wfr.tcl.tk/1559

0 new messages