Introduction
Dans ce laboratoire, nous explorons l'utilisation de TryFrom et TryInto en Rust, qui sont des traits génériques utilisés pour des conversions potentielles entre types et renvoient des types Result. Nous fournissons un extrait de code d'exemple qui démontre l'implémentation de TryFrom pour convertir un i32 en une structure personnalisée EvenNumber, puis montrons comment utiliser TryFrom et TryInto pour effectuer la conversion et gérer les erreurs possibles.
Note : Si le laboratoire ne spécifie pas de nom de fichier, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser
main.rs, le compiler et l'exécuter avecrustc main.rs &&./main.
TryFrom et TryInto
De manière similaire à From et Into, [TryFrom] et [TryInto] sont des traits génériques pour effectuer des conversions entre types. Contrairement à From/Into, les traits TryFrom/TryInto sont utilisés pour des conversions potentielles, et renvoient donc des [Result].
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(()));
}
Résumé
Félicitations ! Vous avez terminé le laboratoire sur TryFrom et TryInto. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.