Gestion des durées de vie dans les structs de Rust

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 avons du code Rust qui démontre l'utilisation des durées de vie dans les structs. Le code inclut une struct appelée Borrowed qui contient une référence à un i32, et la référence doit exister plus longtemps que la struct elle-même. Il y a également une struct appelée NamedBorrowed avec deux références à des i32, les deux références doivent exister plus longtemps que la struct. En outre, il y a un enum appelé Either qui peut être soit un i32 soit une référence à un i32, et la référence doit exister plus longtemps que l'enum. Enfin, le code crée des instances de ces structs et de cet enum, et imprime leur contenu pour montrer l'utilisation des durées de vie en Rust.

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.

Structs

L'annotation des durées de vie dans les structures est également similaire aux fonctions :

// Un type `Borrowed` qui contient une référence à un
// `i32`. La référence à `i32` doit exister plus longtemps que `Borrowed`.
#[derive(Debug)]
struct Borrowed<'a>(&'a i32);

// De même, les deux références ici doivent exister plus longtemps que cette structure.
#[derive(Debug)]
struct NamedBorrowed<'a> {
    x: &'a i32,
    y: &'a i32,
}

// Un enum qui est soit un `i32` soit une référence à un `i32`.
#[derive(Debug)]
enum Either<'a> {
    Num(i32),
    Ref(&'a i32),
}

fn main() {
    let x = 18;
    let y = 15;

    let single = Borrowed(&x);
    let double = NamedBorrowed { x: &x, y: &y };
    let reference = Either::Ref(&x);
    let number    = Either::Num(y);

    println!("x est emprunté dans {:?}", single);
    println!("x et y sont empruntés dans {:?}", double);
    println!("x est emprunté dans {:?}", reference);
    println!("y n'est *pas* emprunté dans {:?}", number);
}

Résumé

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