Fortgeschrittenes Beispiel für Typenschluss in Rust

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 wird der Typenschlussmotor für seine Fähigkeit hervorgehoben, den Typ einer Variable anhand seiner Verwendung und der Wertzuweisung zu deduzieren, was in einem fortgeschrittenen Beispiel mit der Programmiersprache Rust demonstriert wird.

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/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/BasicConceptsGroup -.-> rust/mutable_variables("Mutable Variables") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/variable_declarations -.-> lab-99297{{"Fortgeschrittenes Beispiel für Typenschluss in Rust"}} rust/mutable_variables -.-> lab-99297{{"Fortgeschrittenes Beispiel für Typenschluss in Rust"}} rust/integer_types -.-> lab-99297{{"Fortgeschrittenes Beispiel für Typenschluss in Rust"}} rust/function_syntax -.-> lab-99297{{"Fortgeschrittenes Beispiel für Typenschluss in Rust"}} rust/expressions_statements -.-> lab-99297{{"Fortgeschrittenes Beispiel für Typenschluss in Rust"}} rust/lifetime_specifiers -.-> lab-99297{{"Fortgeschrittenes Beispiel für Typenschluss in Rust"}} rust/method_syntax -.-> lab-99297{{"Fortgeschrittenes Beispiel für Typenschluss in Rust"}} rust/operator_overloading -.-> lab-99297{{"Fortgeschrittenes Beispiel für Typenschluss in Rust"}} end

Typenschluss

Der Typenschlussmotor ist ziemlich intelligent. Er macht mehr als nur auf den Typ des Wertausdrucks beim Initialisieren zu schauen. Er schaut auch, wie die Variable danach verwendet wird, um ihren Typ zu inferieren. Hier ist ein fortgeschrittenes Beispiel für Typenschluss:

fn main() {
    // Aufgrund der Annotation weiß der Compiler, dass `elem` vom Typ u8 ist.
    let elem = 5u8;

    // Erstellt einen leeren Vektor (ein wachsender Array).
    let mut vec = Vec::new();
    // Zu diesem Zeitpunkt weiß der Compiler nicht den genauen Typ von `vec`, er
    // weiß nur, dass es ein Vektor von etwas ist (`Vec<_>`).

    // Fügt `elem` in den Vektor ein.
    vec.push(elem);
    // Aha! Jetzt weiß der Compiler, dass `vec` ein Vektor von `u8`-Werten ist (`Vec<u8>`)
    // TODO ^ Versuchen Sie, die Zeile `vec.push(elem)` auszukommentieren

    println!("{:?}", vec);
}

Es war keine Typannotation der Variablen erforderlich, der Compiler ist zufrieden und auch der Programmierer!

Zusammenfassung

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