TryFrom et TryInto

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 explorons l'utilisation de TryFrom et TryInto en Rust, qui sont des traits génériques utilisés pour des conversions potentielles entre types et renvoient des types Result. Nous fournissons un extrait de code d'exemple qui démontre l'implémentation de TryFrom pour convertir un i32 en une structure personnalisée EvenNumber, puis montrons comment utiliser TryFrom et TryInto pour effectuer la conversion et gérer les erreurs possibles.

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/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/AdvancedTopicsGroup -.-> rust/traits("Traits") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99300{{"TryFrom et TryInto"}} rust/integer_types -.-> lab-99300{{"TryFrom et TryInto"}} rust/function_syntax -.-> lab-99300{{"TryFrom et TryInto"}} rust/expressions_statements -.-> lab-99300{{"TryFrom et TryInto"}} rust/method_syntax -.-> lab-99300{{"TryFrom et TryInto"}} rust/traits -.-> lab-99300{{"TryFrom et TryInto"}} rust/operator_overloading -.-> lab-99300{{"TryFrom et TryInto"}} end

TryFrom et TryInto

De manière similaire à From et Into, [TryFrom] et [TryInto] sont des traits génériques pour effectuer des conversions entre types. Contrairement à From/Into, les traits TryFrom/TryInto sont utilisés pour des conversions potentielles, et renvoient donc des [Result].

use std::convert::TryFrom;
use std::convert::TryInto;

#[derive(Debug, PartialEq)]
struct EvenNumber(i32);

impl TryFrom<i32> for EvenNumber {
    type Error = ();

    fn try_from(value: i32) -> Result<Self, Self::Error> {
        if value % 2 == 0 {
            Ok(EvenNumber(value))
        } else {
            Err(())
        }
    }
}

fn main() {
    // TryFrom

    assert_eq!(EvenNumber::try_from(8), Ok(EvenNumber(8)));
    assert_eq!(EvenNumber::try_from(5), Err(()));

    // TryInto

    let result: Result<EvenNumber, ()> = 8i32.try_into();
    assert_eq!(result, Ok(EvenNumber(8)));
    let result: Result<EvenNumber, ()> = 5i32.try_into();
    assert_eq!(result, Err(()));
}

Résumé

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