rebol - 仅使用 SKIP 的 PARSE 中的替代规则未输出预期结果

标签 rebol rebol3

我遇到了一段代码:

blk: [1 #[none] 2 #[none] 3 #[none]]
probe parse blk [
    any [
        set s integer! (print 'integer) | (print 'none) skip
    ]
]

输出是:

integer
none
integer
none
integer
none
none
true

注意,true前面有两个none。下一个代码片段输出预期的输出:

blk: [1 #[none] 2 #[none] 3 #[none]]
probe parse blk [
    any [
        set s integer! (print 'integer) | and none! (print 'none) skip
    ]
]

输出:

integer
none
integer
none
integer
none
true

为什么上一个不能输出与上一个相同的结果?

最佳答案

你的第一条规则最好是

probe parse blk [
    any [
        set s integer! (print 'integer) | skip (print 'none) 
    ]
]

就像在您的第一条规则中一样,如果没有整数,则不打印任何内容,然后跳过。这会导致即使光标位于末尾也不会打印任何内容。跳过只是结束解析。

在第二条规则中,none! 最后不是 true,因此解析停止。可以写短一点

probe parse blk [
    any [
        set s integer! (print 'integer) |  none! (print 'none) 
    ]
]

在第二条规则中,不会向前移动光标,因此您需要额外的跳过。如果没有,则无!已经吃掉了一件元素。

关于rebol - 仅使用 SKIP 的 PARSE 中的替代规则未输出预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24463847/

相关文章:

rebol - 解析字符串以查找第一个重复字符 - 功能与程序编码风格

rebol - REBOL 中的多行语句?

parsing - 如何使用 REBOL 解析 HTML 标签内部?

rebol - 聊天应用程序如何实时读取文件?

undefined - VALUE是怎么来的?功能工作?

mysql - Rebol2 无法连接到 MariaDB

html - 解析此 "simple"html 页面的巨大问题

return - 为什么 return/redo 在调用上下文中评估结果函数,但不评估 block 结果?

currency - 如何用 R3 钱显示美分?

http - 如何在Rebol3中获取HTTP响应头?