problème avec build-markup
dionysos22-Jun-2011/20:52:50+2:00
Salut,
Je me tourne de nouveau vers vous car j'ai buté sur un problème que j'ai fini par contourner. Mais s'il existe une vrai solution, je suis preneur.
Site: Context [
	root: http://www.monsite.fr/
	query-form: "search=<%[b]id[/b]%>.html"
	
	query: func [
		""
		query-form [string!]
	][
		read join url query-form
	]
	
	grab: func [
		""
		[b]id[/b] [string!]
		/local reply
	][

		reply: query build-markup query-form
		
		; ....
		
	]
]

Dans le contexte de la fonction grab, id est défini localement, mais la fonction build-markup ne le trouve pas. Il semble que build-markup aille la valeur d'id dans le namespace globale.

J'ai regardé le code de build-markup, j'ai pas compris ce qui faisait que la variable n'était pas trouvé.
Je ne maîtrise pas le bind, alors j'ai regardé de ce côté là, puisque grosso modo j'ai compris que cette fonction permettait de donner la visibilité sur des variables dans des blocs. (si quelqu'un veut bien donner quelques explications sur l'utilisation du bind, je suis preneur aussi )

Sinon, il me semblait que la fonction set permettait de créer des objets globaux quelques soit l'endroit de la déclaration. Donc j'ai ajouté dans la fonction grab la ligne
set 'id id 

mais sans succès.

Il y a des astuces pour avoir la liste des variables allouées dans un contexte global/local. Je n'ai rien trouvé dans la doc.

Finalement,
j'ai trouvé cette solution
Site: Context [
        id: none
	root: http://www.monsite.fr/
	query-form: "search=<%[b]Site/id[/b]%>.html"
	
	query: func [
		""
		query-form [string!]
	][
		read join url query-form
	]
	
	grab: func [
		""
		[b]id[/b] [string!]
		/local reply
	][
                [b]Site/id: id[/b]
		reply: query build-markup query-form
		
		; ....
		
	]
]


Mais, ça oblige à créer Site/id qui me sert à rien dans la suite du code!

D'avance merci.
dionysos22-Jun-2011/20:54:29+2:00
Bon ben tant pis pour la mise en gras des variables intéressantes dans le code...
Laurent22-Jun-2011/21:06:12+2:00
je crois que "collect-words" pourrait t'être utile, mais je ne l'ai jamais utilisé:

>> help collect-words
USAGE:
COLLECT-WORDS block /deep /set /ignore words

DESCRIPTION:
Collect unique words used in a block (used for context construction).
COLLECT-WORDS is a function value.

ARGUMENTS:
block -- (Type: block)

REFINEMENTS:
/deep -- Include nested blocks
/set -- Only include set-words
/ignore -- Ignore prior words
words -- Words to ignore (Type: object port block)
>>

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2