Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 解析中BREAK和REJECT的区别_Parsing_Rebol_Rebol3_Red - Fatal编程技术网

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规则失败

有关更多详细信息,请参阅