Undocumented if-let behavior with or-patterns

Ouverte Adaptée aux débutants
#2,405 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
70/100
Type d'issue
Documentation
Clarté
Clairement spécifiée
Activité
Active
Stack technique
rust
Domaine
documentation

Piste de recherche

Le ticket donne un exemple Rust en deux parties : un if let avec un motif en alternative et une garde &&, et un match avec le même motif en alternative et la même garde. Exécute les deux pour confirmer la différence, puis trouve dans la Référence les chapitres sur les motifs en alternative, les gardes de match, if let et les chaînes de let. C'est terminé lorsque la Référence indique qu'une chaîne de let ne réessaie pas les alternatives du motif quand la condition suivante échoue, alors qu'une garde de match le fait.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Or-patterns in a match can cause a match guard to run multiple times, as each of the or'ed patterns gets tried after the previous one fails in the guard. However, with let-chains, there is no such "backtracking" behavior. This is not documented in the reference.

fn main() {
    if let (x, _) | (_, x) = (1, 2)
        && x == 2
    {
        println!("This is NOT printed.");
    }
    match (1, 2) {
        (x, _) | (_, x) if x == 2 => {
            println!("This is printed.");
        }
        _ => {}
    }
}

Relevant discussion: https://rust-lang.zulipchat.com/#narrow/channel/213817-t-lang/topic/Merging.20destructuring.20assignment.20and.20patterns/near/576565919

Langage dominant
Rust
Étoiles
1.6k
Forks
618
Merge moyen
5 h 48 min
PR mergées (30 j)
3

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de rust-lang/reference

Toutes les issues de rust-lang/reference

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.