2 votes

Différence entre la liaison des correspondances et la déstructuration des correspondances ?

Récemment, je lisais un article sur le match dans la section Livre de la rouille . Ce qui m'a troublé, c'est la différence entre Binding y Destructuring . D'après ce que j'ai compris, les deux permettent d'accéder aux variables d'une expression. Binding peut spécifier une correspondance de plage, mais vous pouvez le faire avec Destructuring y Guards . Alors quelqu'un peut-il montrer des cas où seulement Binding peut faire ou expliquer la différence réelle entre ces deux concepts ?

1 votes

Je pense que le document manque d'un type d'exemple, vous pouvez lier l'ensemble du modèle, ce qui n'est pas possible avec les destructions et les gardes, merci de vérifier : play.rust-lang.org/ .

1voto

AdaShoelace Points 302

Vous pouvez voir ici un scénario dans lequel une liaison est nécessaire parce que la déstructuration ne répond pas à notre besoin actuel. Si nous déstructurons simplement la structure, nous avons accès au champ interne de la structure. Cela signifie que les valeurs utilisées sur le côté droit dans le bras de match n'auront pas accès aux méthodes définies sur la structure.

Dans mon exemple, je fais également une correspondance avec une valeur spécifique de ex.value cela n'est bien sûr pas nécessaire et peut être fait avec une garde à la place, cette façon est cependant plus concise si la condition n'est pas très complexe.

struct Example {
    some_value: i32,
    some_other_value: String
}

impl Example {
    pub fn some_fn(&mut self) {}
}

fn main() {
    let ex = Example { some_value: 42, some_other_value: "Foobar".to_string() };

    match ex {
        mut new_ex @ Example { some_value: 43, .. } => new_ex.some_fn(),
        Example { some_value: first, some_other_value: second } => println!("first value: {}\nSecond value: {}", first, second),
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X