2009-06-29 8 views
2

je lis le chapitre 15: http://www.rebol.com/docs/core23/rebolcore-15.html#section-8 "Rebol Parse: traiter les espaces et copier var

spacer: charset reduce [tab newline #" "] 
spaces: [some spacer] 
rule: ["a" spaces "b" spaces "c"] 
parse/all "a b c" rule 

est OK, mais si je change la règle juste

rule: ["a" spaces copy varb to spaces "c"] 
parse/all "a b c" rule 

Rebol sorties Console Erreur:

** Script Error: Invalid argument: some spacer 
** Where: halt-view 
** Near: parse/all "a b c" rule 
>> 

Pourquoi?

Merci.

Répondre

4

Dans REBOL 2, l'argument de l'opération TO de PARSE ne peut pas être une règle complexe - il doit s'agir d'une valeur littérale ou d'un jeu de caractères. Le code [to spaces] est équivalent à [to [some spacer]] et cela ne fonctionnera tout simplement pas. Dans votre exemple, vous pouvez convertir [to spaces] en [to spacer spaces] et cela devrait fonctionner correctement.

Il existe des astuces pour contourner ce problème, qui consistent principalement à refactoriser le [to [some spacer]] en [any non-spacer] où le caractère non-espaceur est le complément du jeu de caractères d'espacement.

Il est prévu que cela sera corrigé dans REBOL 3, mais ce correctif n'a pas encore été fait, et le complément d'un jeu de caractères ne fonctionne pas aussi bien à cause d'Unicode. Stick avec REBOL 2 pour l'instant.