4

RebolRed中,都有两个 PARSE 关键字: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

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

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

4

1 回答 1

3

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

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

这里我们至少匹配了一次“a”,然后打破了一些规则,一直持续到最后。这是真实的。

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

这里虽然我们匹配了一次“a”,但reject 会导致某些规则失败。

有关详细信息,请参阅Carl 的博客。

于 2014-05-01T07:49:45.930 回答