J'écris un compilateur en Rust. Dans le cadre de mon lexer, j'essaie de faire correspondre un seul caractère du flux d'entrée à une plage de caractères (plus d'un). J'essaye actuellement une approche utilisant l'opérateur ...

match input_token {
    'Z'..'a' => { // I want to match any character from 'a' -> 'z' and 'A' -> 'Z' inclusive
        ... run some code
    }
}

Est-il possible de faire correspondre plusieurs valeurs dans un seul bras d'une expression/instruction de correspondance Rust ?

2
Teymour Aldridge 6 févr. 2020 à 22:46

2 réponses

Meilleure réponse

Le modèle pour les plages inclusives est begin..=end et vous pouvez combiner des modèles en utilisant |, donc vous voulez

match input_token {
    'A'..='Z' | 'a'..='z' => {
        ... run some code
    }
}
6
mcarton 22 mai 2020 à 15:31

Une alternative consiste à utiliser un modèle if pour gérer des cas plus complexes :

match input_token {
    token if token.is_ascii_alphabetic() {
        // ... 
    }
    // ...
}
0
Teymour Aldridge 23 mai 2020 à 11:21