Implémenter le trait générique de double désallocation

Beginner

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

Introduction

Dans ce laboratoire, un trait générique DoubleDrop est défini, qui inclut une méthode double_drop qui permet à un type de se désallouer lui-même et d'un paramètre d'entrée.

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.

Traits

Bien sûr, les traits peuvent également être génériques. Ici, nous définissons l'un qui réimplémente le trait Drop en tant que méthode générique pour se détruire lui-même et une entrée.

// Types non copiables.
struct Empty;
struct Null;

// Un trait générique sur `T`.
trait DoubleDrop<T> {
    // Définissez une méthode sur le type appelant qui prend un
    // paramètre unique supplémentaire `T` et ne fait rien avec lui.
    fn double_drop(self, _: T);
}

// Implémentez `DoubleDrop<T>` pour tout paramètre générique `T` et
// appelant `U`.
impl<T, U> DoubleDrop<T> for U {
    // Cette méthode prend la propriété des deux arguments passés,
    // les désallocant tous les deux.
    fn double_drop(self, _: T) {}
}

fn main() {
    let empty = Empty;
    let null  = Null;

    // Désalloue `empty` et `null`.
    empty.double_drop(null);

    //empty;
    //null;
    // ^ TODO: Essayez de décommenter ces lignes.
}

Résumé

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