我读了第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
>>
为什么?
感谢。
答案 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。