Rebol的INTO允许解析器下降为序列类型(例如,块!或者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的行为?
发布于 2013-01-26 02:40:16
这是卡尔在R2中发现的一个“奇怪”的属性。因此,他在R3中将其替换为更可预期的行为。奇怪的是,你用这种方式得到的块和paren是一样的!(只需尝试更改内容),但声明它具有不同的类型。但是,如果您需要引用R2中的paren,您的代码可以很容易地进行调整:
data: [(a b)]
parse data [pos: into ['a 'b (
pos: first pos
probe pos
either pos = (first data) [
print rejoin ["equal to original " mold first data]
] [
print rejoin ["not equal to original " mold first data]
]
)]]另一个为您提供所需结果的修改:
data: [(a b)]
parse data [set pos into ['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]
]
)]https://stackoverflow.com/questions/14525958
复制相似问题