Caso de prueba: Límites vacíos

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, el código demuestra cómo se pueden utilizar los tratos como límites, incluso si los tratos no incluyen ninguna funcionalidad, tomando como ejemplo los tratos Eq y Copy.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/AdvancedTopicsGroup -.-> rust/traits("Traits") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99349{{"Caso de prueba: Límites vacíos"}} rust/string_type -.-> lab-99349{{"Caso de prueba: Límites vacíos"}} rust/function_syntax -.-> lab-99349{{"Caso de prueba: Límites vacíos"}} rust/expressions_statements -.-> lab-99349{{"Caso de prueba: Límites vacíos"}} rust/lifetime_specifiers -.-> lab-99349{{"Caso de prueba: Límites vacíos"}} rust/traits -.-> lab-99349{{"Caso de prueba: Límites vacíos"}} rust/operator_overloading -.-> lab-99349{{"Caso de prueba: Límites vacíos"}} end

Caso de prueba: límites vacíos

Una consecuencia de cómo funcionan los límites es que incluso si un trait no incluye ninguna funcionalidad, aún puede utilizarse como límite. Eq y Copy son ejemplos de tales traits de la biblioteca std.

struct Cardinal;
struct BlueJay;
struct Turkey;

trait Red {}
trait Blue {}

impl Red for Cardinal {}
impl Blue for BlueJay {}

// Estas funciones solo son válidas para los tipos que implementan estos
// traits. El hecho de que los traits estén vacíos es irrelevante.
fn red<T: Red>(_: &T)   -> &'static str { "red" }
fn blue<T: Blue>(_: &T) -> &'static str { "blue" }

fn main() {
    let cardinal = Cardinal;
    let blue_jay = BlueJay;
    let _turkey   = Turkey;

    // `red()` no funcionará en un jay azul ni viceversa
    // debido a los límites.
    println!("Un cardenal es {}", red(&cardinal));
    println!("Un jay azul es {}", blue(&blue_jay));
    //println!("Una pavo es {}", red(&_turkey));
    // ^ TODO: Intente descomentar esta línea.
}

Resumen

¡Felicitaciones! Has completado el laboratorio Caso de prueba: Límites vacíos. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.