Implementierung von generischen Typen 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 lernen wir, wie wir generische Typen und Methoden in Rust implementieren, was es uns ermöglicht, unterschiedliche Typparameter anzugeben, wenn wir das Struct verwenden oder die Methoden aufrufen.

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.

Implementierung

Ähnlich wie Funktionen erfordern Implementierungen Sorgfalt, um generisch zu bleiben.

struct S; // Konkreter Typ `S`
struct GenericVal<T>(T); // Generischer Typ `GenericVal`

// Implementierung von GenericVal, bei der wir die Typparameter explizit angeben:
impl GenericVal<f32> {} // Geben Sie `f32` an
impl GenericVal<S> {} // Geben Sie `S` wie oben definiert an

// `<T>` Muss dem Typ vorausgehen, um generisch zu bleiben
impl<T> GenericVal<T> {}
struct Val {
    val: f64,
}

struct GenVal<T> {
    gen_val: T,
}

// Implementierung von Val
impl Val {
    fn value(&self) -> &f64 {
        &self.val
    }
}

// Implementierung von GenVal für einen generischen Typ `T`
impl<T> GenVal<T> {
    fn value(&self) -> &T {
        &self.gen_val
    }
}

fn main() {
    let x = Val { val: 3.0 };
    let y = GenVal { gen_val: 3i32 };

    println!("{}, {}", x.value(), y.value());
}

Zusammenfassung

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