Rust Trait Vererbung und Komposition

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 untersuchen wir, wie man in Rust Traits als Supermengen anderer Traits definiert, um die Implementierung mehrerer Traits über Subtraits zu ermöglichen.

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/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) 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") subgraph Lab Skills rust/function_syntax -.-> lab-99221{{"Rust Trait Vererbung und Komposition"}} rust/expressions_statements -.-> lab-99221{{"Rust Trait Vererbung und Komposition"}} rust/method_syntax -.-> lab-99221{{"Rust Trait Vererbung und Komposition"}} rust/traits -.-> lab-99221{{"Rust Trait Vererbung und Komposition"}} end

Supertraits

Rust hat keine "Vererbung", aber Sie können einen Trait als Supermenge eines anderen Traits definieren. Beispielsweise:

trait Person {
    fn name(&self) -> String;
}

// Person ist ein Supertrait von Student.
// Die Implementierung von Student erfordert auch die Implementierung von Person.
trait Student: Person {
    fn university(&self) -> String;
}

trait Programmer {
    fn fav_language(&self) -> String;
}

// CompSciStudent (Informatikstudent) ist ein Subtrait sowohl von Programmer
// als auch von Student. Die Implementierung von CompSciStudent erfordert die Implementierung beider Supertraits.
trait CompSciStudent: Programmer + Student {
    fn git_username(&self) -> String;
}

fn comp_sci_student_greeting(student: &dyn CompSciStudent) -> String {
    format!(
        "My name is {} and I attend {}. My favorite language is {}. My Git username is {}",
        student.name(),
        student.university(),
        student.fav_language(),
        student.git_username()
    )
}

fn main() {}

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Supertraits-Lab abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.