2014-05-01 6 views
4

Tant dans Rebol et Red, il y a deux Parse mots clés: break et reject qui ont des comportements similaires: sortir d'une boucle de correspondance (comme tout, certains, alors que), la différence est que breakindiquant toujourssuccès tout rejectindiquentéchec. Je sais ce que cela signifie littéralement, mais je n'arrive pas à trouver un scénario approprié pour savoir lequel des deux mots-clés doit être utilisé.Différence entre pause et REJET dans parse

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 

Dans le code ci-dessus, soit break ou reject produira le même résultat.

Alors, n'importe qui peut me montrer quelle est la différence entre ces deux mots clés?

Répondre

3

La valeur de vérité produite par break dépend du fait que le nombre minimal d'itérations dans une règle itérative a été atteint ou non.

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

que nous avons ici apparié « a » au moins une fois, puis rompu de la règle et a continué une à la fin. C'est vrai.

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

Ici, bien que nous ayons apparié "a" une fois, rejeter entraîne l'échec de la règle. Pour plus de détails, voir Carl's blog.