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 avecrustc 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.