PARSE中BREAK和REJECT之间的区别

时间:2014-05-01 03:48:24

标签: parsing rebol rebol3 red

RebolRed中,有两个PARSE关键字:breakreject,它们具有相似的行为:突破匹配循环(例如,任何,某些,而),不同之处在于break 始终指示 成功,而reject 指示< / em> 失败。 我知道字面意思是什么,但无法弄清楚应该使用哪两个关键字的正确场景。

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

在上面的代码中,breakreject会产生相同的结果。

所以任何人都可以告诉我这两个关键字之间有什么区别?

1 个答案:

答案 0 :(得分:3)

break生成的真值取决于是否已达到迭代规则中的最小迭代次数。

>> parse "aaabbb"  [ some [ "a" break ] to end]
== true

我们在这里匹配了#34; a&#34;至少一次,然后突破一些规则并持续到最后。这是真的。

>> parse "aaabbb"  [ some [ "a" reject ] to end]
== false

虽然我们匹配&#34; a&#34;一旦拒绝导致某些规则失败。

有关详细信息,请参阅Carl's blog