TryFrom und TryInto

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 die Verwendung von TryFrom und TryInto in Rust, die generische Traits sind, die für fehlerbehaftete Konvertierungen zwischen Typen verwendet werden und Result-Typen zurückgeben. Wir stellen einen Beispiel-Codeschnipsel bereit, der die Implementierung von TryFrom zur Konvertierung einer i32 in eine benutzerdefinierte EvenNumber-Struktur demonstriert, und zeigen dann, wie TryFrom und TryInto verwendet werden, um die Konvertierung durchzuführen und die möglichen Fehler zu behandeln.

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.

TryFrom und TryInto

Ähnlich wie From und Into sind [TryFrom] und [TryInto] generische Traits zur Konvertierung zwischen Typen. Im Gegensatz zu From/Into werden die TryFrom/TryInto-Traits für fehlerbehaftete Konvertierungen verwendet und geben daher [Result]s zurück.

use std::convert::TryFrom;
use std::convert::TryInto;

#[derive(Debug, PartialEq)]
struct EvenNumber(i32);

impl TryFrom<i32> for EvenNumber {
    type Error = ();

    fn try_from(value: i32) -> Result<Self, Self::Error> {
        if value % 2 == 0 {
            Ok(EvenNumber(value))
        } else {
            Err(())
        }
    }
}

fn main() {
    // TryFrom

    assert_eq!(EvenNumber::try_from(8), Ok(EvenNumber(8)));
    assert_eq!(EvenNumber::try_from(5), Err(()));

    // TryInto

    let result: Result<EvenNumber, ()> = 8i32.try_into();
    assert_eq!(result, Ok(EvenNumber(8)));
    let result: Result<EvenNumber, ()> = 5i32.try_into();
    assert_eq!(result, Err(()));
}

Zusammenfassung

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