Plusieurs types d'erreurs

RustRustBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous voyons un exemple où une Option doit interagir avec une Result, ou une Result<T, Error1> doit interagir avec une Result<T, Error2>.

Note : Si le laboratoire ne spécifie pas de nom de fichier, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser main.rs, le compiler et l'exécuter avec rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") subgraph Lab Skills rust/variable_declarations -.-> lab-99244{{"Plusieurs types d'erreurs"}} rust/integer_types -.-> lab-99244{{"Plusieurs types d'erreurs"}} rust/string_type -.-> lab-99244{{"Plusieurs types d'erreurs"}} rust/function_syntax -.-> lab-99244{{"Plusieurs types d'erreurs"}} rust/expressions_statements -.-> lab-99244{{"Plusieurs types d'erreurs"}} rust/lifetime_specifiers -.-> lab-99244{{"Plusieurs types d'erreurs"}} rust/method_syntax -.-> lab-99244{{"Plusieurs types d'erreurs"}} end

Plusieurs types d'erreurs

Les exemples précédents ont toujours été très pratiques ; les Result interagissent avec d'autres Result et les Option interagissent avec d'autres Option.

Parfois, une Option doit interagir avec une Result, ou une Result<T, Error1> doit interagir avec une Result<T, Error2>. Dans ces cas, nous voulons gérer nos différents types d'erreurs de manière à les rendre composables et faciles à interagir.

Dans le code suivant, deux instances de unwrap génèrent différents types d'erreurs. Vec::first renvoie une Option, tandis que parse::<i32> renvoie une Result<i32, ParseIntError> :

fn double_first(vec: Vec<&str>) -> i32 {
    let first = vec.first().unwrap(); // Génère l'erreur 1
    2 * first.parse::<i32>().unwrap() // Génère l'erreur 2
}

fn main() {
    let numbers = vec!["42", "93", "18"];
    let empty = vec![];
    let strings = vec!["tofu", "93", "18"];

    println!("Le premier doublé est {}", double_first(numbers));

    println!("Le premier doublé est {}", double_first(empty));
    // Erreur 1 : le vecteur d'entrée est vide

    println!("Le premier doublé est {}", double_first(strings));
    // Erreur 2 : l'élément ne peut pas être analysé en tant que nombre
}

Dans les sections suivantes, nous verrons plusieurs stratégies pour résoudre ce genre de problèmes.

Sommaire

Félicitations ! Vous avez terminé le laboratoire Plusieurs types d'erreurs. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.