Implementar el trato genérico de doble desasignación

Beginner

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

Introducción

En este laboratorio, se define un trato genérico DoubleDrop, que incluye un método double_drop que permite a un tipo desasignarse a sí mismo y a un parámetro de entrada.

Nota: Si el laboratorio no especifica un nombre de archivo, puede usar cualquier nombre de archivo que desee. Por ejemplo, puede usar main.rs, compilar y ejecutarlo con rustc main.rs &&./main.

Tratos

Por supuesto, los tratos también pueden ser genéricos. Aquí definimos uno que reimplementa el trato Drop como un método genérico para desecharse a sí mismo y una entrada.

// Tipos no copiables.
struct Empty;
struct Null;

// Un trato genérico sobre `T`.
trait DoubleDrop<T> {
    // Defina un método en el tipo del llamador que toma un
    // parámetro único adicional `T` y no hace nada con él.
    fn double_drop(self, _: T);
}

// Implemente `DoubleDrop<T>` para cualquier parámetro genérico `T` y
// llamador `U`.
impl<T, U> DoubleDrop<T> for U {
    // Este método toma la propiedad de ambos argumentos pasados,
    // desasignando ambos.
    fn double_drop(self, _: T) {}
}

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

    // Desasigna `empty` y `null`.
    empty.double_drop(null);

    //empty;
    //null;
    // ^ TODO: Intente descomentar estas líneas.
}

Resumen

¡Felicitaciones! Has completado el laboratorio de Tratos. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.