to-set-path
neoreb5-Feb-2007/19:13:32+1:00
A B .. D sont des variables bouttons dans une view.

liste1: [A B]
liste2: [C D]

to-set-path reduce [liste1/1 'text] do to-path reduce [liste2/1 'text]

je voudrais que ca fasse

A/text: C/text

mais apparemment le to-set-path ne marche pas (?)

merci d'avance
neoreb5-Feb-2007/21:49:12+1:00
je me reponds

le code ci-dessous marche

change do to-path reduce [liste1/1 'text] do to-path reduce [liste2/1 'text]

mais y aurait-il quelqu'un pour confirmer que to-set-path ne marche pas ?
merci
coccinelle6-Feb-2007/8:34:37+1:00
Le problème, c'est le placement de ton do. Ceci doit fonctionner :
reduce [to-set-path reduce [liste1/1 'text] to-path reduce [liste2/1 'text]]
coccinelle6-Feb-2007/8:36:10+1:00
Arg, j'oubliais le do :
do reduce [to-set-path reduce [liste1/1 'text] to-path reduce [liste2/1 'text]]
neoreb6-Feb-2007/9:40:11+1:00
ah merci coccinelle

mais je n'arrive pas à comprendre pourquoi il faut le do ET le premier reduce.

Je ne comprends pas pourquoi le do ne suffit pas:

do [to-set-path reduce [liste1/1 'text] to-path reduce [liste2/1 'text]]

ne marche pas
Reb-Kodeur6-Feb-2007/12:09:37+1:00
La raison est qu'il faut encore un second niveau de 'reducing pour que le do puisse correctement effectuer son job. Mais plus exactement, je ne sais. Didec peut te renseigner je pense
Didec6-Feb-2007/13:20:13+1:00
Le 'do sans 'reduce exécute simplement les instructions 'to-set-path. Le résultat est qu'il génère le code que tu veux (a/text: C/text) et non qu'il l'exécute.

Il suffit de mettre 'probe devant la ligne sans le 'reduce pour voir que le résultat est "C/text" (soit le résultat de l'exécution du block). On voit bien que c'est le path qui est retourné et non la valeur de la propriété 'text de 'C.

Le 'reduce sans 'do fait de même.

Donc avec les 2, on a 'reduce qui génère le code que tu veux et 'do qui l'exécute.
neoreb6-Feb-2007/22:22:43+1:00
merci didec

compris pourquoi il faut do reduce

mais alors pourquoi do do (2 fois do) ne marche pas ?
coccinelle7-Feb-2007/9:07:45+1:00
Ce que tu veux, c'est exécuter un bout de script composé dynamiquement. Dans ce cas, tu dois composer un bloc sinon comment pourrait savoir où s'arrête ce morceau de script.

Le reduce te permet de composer dynamiquement ce morceau de script. Le do permet de l'exécuter.

Personnellement, je préfère utiliser compose plutôt que reduce dans cas, ce qui donnerait :
do compose [(rejoin [to-set-path liste1/1 'text]) (rejoin [to-path liste2/1 'text])]
neoreb7-Feb-2007/12:09:38+1:00
oui ok compris. j'avais repondu trop vite

merci

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2