Testfall: Leere Schranken

RustRustBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab zeigt der Code, wie Traits als Schranken verwendet werden können, auch wenn die Traits keine Funktionalität enthalten, indem die Traits Eq und Copy als Beispiel verwendet werden.

Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie main.rs verwenden und es mit rustc main.rs &&./main kompilieren und ausführen.


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{{"Testfall: Leere Schranken"}} rust/string_type -.-> lab-99349{{"Testfall: Leere Schranken"}} rust/function_syntax -.-> lab-99349{{"Testfall: Leere Schranken"}} rust/expressions_statements -.-> lab-99349{{"Testfall: Leere Schranken"}} rust/lifetime_specifiers -.-> lab-99349{{"Testfall: Leere Schranken"}} rust/traits -.-> lab-99349{{"Testfall: Leere Schranken"}} rust/operator_overloading -.-> lab-99349{{"Testfall: Leere Schranken"}} end

Testfall: leere Schranken

Eine Folge davon, wie Schranken funktionieren, ist, dass Sie auch dann einen trait als Schranke verwenden können, wenn er keine Funktionalität enthält. Eq und Copy sind Beispiele für solche traits aus der std-Bibliothek.

struct Cardinal;
struct BlueJay;
struct Turkey;

trait Red {}
trait Blue {}

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

// Diese Funktionen sind nur gültig für Typen, die diese
// Traits implementieren. Dass die Traits leer sind, ist irrelevant.
fn red<T: Red>(_: &T)   -> &'static str { "rot" }
fn blue<T: Blue>(_: &T) -> &'static str { "blau" }

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

    // `red()` funktioniert nicht für einen Blaumeise, und umgekehrt
    // wegen der Schranken.
    println!("Eine Kardinalen ist {}", red(&cardinal));
    println!("Eine Blaumeise ist {}", blue(&blue_jay));
    //println!("Eine Truthahn ist {}", red(&_turkey));
    // ^ TODO: Versuchen Sie, diese Zeile auszulassen.
}

Zusammenfassung

Herzlichen Glückwunsch! Sie haben den Testfall: Leere Schranken Lab abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.