Rebol 的 INTO 允许解析器降级为系列类型(例如 BLOCK!或 PAREN!)以将匹配规则应用于块的内容。这是 Rebol 3 中的一个简单示例:
data: [(a b)]
parse data [into [pos: 'a 'b (
probe pos
either pos = (first data) [
print rejoin ["equal to original " mold first data]
] [
print rejoin ["not equal to original " mold first data]
]
)]]
由于块中唯一的内容是带括号的系列,因此 INTO 规则立即匹配。使用 SET-WORD!,告诉解析器在进入括号时捕获位置pos
。A 和 B 匹配为文字 LIT-WORD!s,然后执行随后的代码。预期的结果发生:
(a b)
equal to original (a b)
那太棒了。但奇怪的是,Rebol 2 将括号转换为相同代码的块:
[a b]
not equal to original (a b)
如果您的输入是data: [a/b]
:
[a b]
not equal to original a/b
为什么会这样?如果您使用的是 Rebol 2,有没有办法获得 Rebol 3 的行为?