Implementar el trato genérico de doble desasignación

RustRustBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/AdvancedTopicsGroup -.-> rust/traits("Traits") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99347{{"Implementar el trato genérico de doble desasignación"}} rust/function_syntax -.-> lab-99347{{"Implementar el trato genérico de doble desasignación"}} rust/expressions_statements -.-> lab-99347{{"Implementar el trato genérico de doble desasignación"}} rust/method_syntax -.-> lab-99347{{"Implementar el trato genérico de doble desasignación"}} rust/traits -.-> lab-99347{{"Implementar el trato genérico de doble desasignación"}} rust/operator_overloading -.-> lab-99347{{"Implementar el trato genérico de doble desasignación"}} end

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.