Parsing 解析中BREAK和REJECT的区别
在和中,有两个解析关键词:Parsing 解析中BREAK和REJECT的区别,parsing,rebol,rebol3,red,Parsing,Rebol,Rebol3,Red,在和中,有两个解析关键词:break和reject具有相似的行为:打破匹配循环(如any、some、while),区别在于break始终表示成功,而reject表示失败。 我知道它的字面意思,但无法找出两个关键字中应该使用哪一个的合适场景 blk: [ 1 #[none] 2 #[none] #[none] 4 5 6 #[none] ] count: 0 result: parse blk [ any [ remove none! insert 2
break
和reject
具有相似的行为:打破匹配循环(如any、some、while),区别在于break
始终表示成功,而reject
表示失败。
我知道它的字面意思,但无法找出两个关键字中应该使用哪一个的合适场景
blk: [ 1 #[none] 2 #[none] #[none] 4 5 6 #[none] ]
count: 0
result: parse blk [
any [
remove none! insert 2
if ((count: count + 1) >= 2) break
|
skip
]
]
probe blk ;will get [1 0 2 0 none 4 5 6 none]
probe result ;will get false
probe count ;will get 2
在上面的代码中,break
或reject
将产生相同的结果
因此,任何人都可以告诉我这两个关键字之间的区别是什么?由
break
生成的真值取决于迭代规则中的最小迭代次数是否已达到
>> parse "aaabbb" [ some [ "a" break ] to end]
== true
在这里,我们至少匹配了一次“a”,然后打破了一些规则,继续到最后。这是真的
>> parse "aaabbb" [ some [ "a" reject ] to end]
== false
在这里,虽然我们匹配了一次“a”,但拒绝会导致some规则失败
有关更多详细信息,请参阅