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