Rebol解析:处理空格和复制var

时间:2009-06-29 21:41:06

标签: rebol

我读了第15章: http://www.rebol.com/docs/core23/rebolcore-15.html#section-8

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

没关系,但如果我将规则更改为

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

Rebol控制台输出错误:

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

为什么?

感谢。

1 个答案:

答案 0 :(得分:4)

在REBOL 2中,PARSE的TO操作的参数不能是一个复杂的规则 - 它必须是文字值或字符集。代码[to spaces]等同于[to [some spacer]],但这不起作用。在您的示例中,您可以将[to spaces]转换为[to spacer spaces],它应该可以正常工作。

有一些技巧可以解决这个问题,主要涉及将[to [some spacer]]重构为[any non-spacer],其中非spacer是间隔字符集的补充。

这将在REBOL 3中修复,但该修复尚未完成,并且由于Unicode,补充字符集也不起作用。现在坚持使用REBOL 2。