4

RebolRedの両方に、2 つの PARSE キーワードがあります: breakandrejectは同様の動作をします:一致ループ (any、some、while など) から抜け出します。違いは、break 常に 成功reject 示し、 失敗を示します。文字どおりの意味は知っていますが、2 つのキーワードのどちらを使用すべきかという適切なシナリオがわかりません。

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

上記のコードでは、breakorのどちらでもreject同じ結果が得られます。

では、この 2 つのキーワードの違いを教えてくれる人はいますか?

4

1 に答える 1

3

によって生成される真理値breakは、反復ルールの最小反復回数に達したかどうかによって異なります。

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

ここでは、「a」に少なくとも 1 回一致し、some ルールから抜け出し、最後まで続けました。これは本当です。

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

ここでは "a" に 1 回一致しましたが、reject によって some ルールが失敗します。

詳細については、 Carl のブログを参照してください。

于 2014-05-01T07:49:45.930 に答える