我遇到了一段代码:
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/