首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rebol 2解析与Rebol 3中的行为差异

Rebol 2解析与Rebol 3中的行为差异
EN

Stack Overflow用户
提问于 2013-01-26 00:23:05
回答 1查看 127关注 0票数 1

Rebol的INTO允许解析器下降为序列类型(例如,块!或者PAREN!)若要对块的内容应用匹配规则,请执行以下操作。下面是Rebol 3中的一个简单示例:

代码语言:javascript
复制
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,然后执行随后的代码。预期的结果会发生:

代码语言:javascript
复制
(a b)
equal to original (a b)

太好了。但奇怪的是,Rebol 2将括号转换为相同代码的块:

代码语言:javascript
复制
[a b]
not equal to original (a b)

如果您的输入为data: [a/b],则会发生相同的块转换

代码语言:javascript
复制
[a b]
not equal to original a/b

这一切为什么要发生?如果你使用的是Rebol 2,有没有办法获得Rebol 3的行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-26 02:40:16

这是卡尔在R2中发现的一个“奇怪”的属性。因此,他在R3中将其替换为更可预期的行为。奇怪的是,你用这种方式得到的块和paren是一样的!(只需尝试更改内容),但声明它具有不同的类型。但是,如果您需要引用R2中的paren,您的代码可以很容易地进行调整:

代码语言:javascript
复制
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]
    ]
)]]

另一个为您提供所需结果的修改:

代码语言:javascript
复制
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]
    ]
)]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14525958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档