rust / intermediate
Snippet
From und Into Trait Paare
From und Into sind komplementäre Traits, die flexible Typkonvertierungen ermöglichen. Wenn du From für deinen Typ implementierst, wird Into automatisch implementiert. Dies folgt dem Prinzip, dass Konvertierungen offensichtlich statt implizit sein sollten.
snippet.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#[derive(Debug)]struct Person {name: String,age: u32,}impl From<(String, u32)> for Person {fn from(tuple: (String, u32)) -> Self {Person { name: tuple.0, age: tuple.1 }}}impl From<&str> for Person {fn from(s: &str) -> Self {let parts: Vec<&str> = s.split(',').collect();Person {name: parts[0].to_string(),age: parts[1].trim().parse().unwrap_or(0),}}}fn main() {let p1: Person = (String::from("Alice"), 30).into();let p2: Person = Person::from("Bob,25");println!("{:?} and {:?}", p1, p2);}
Erklärung
1
impl From<(String, u32)> for Person
Implementiert From für ein Tuple aus Name und Alter
2
fn from(tuple: (String, u32)) -> Self
Nimmt Ownership des Tuples und erstellt Person
3
impl From<&str> for Person
Implementiert auch From für String Slice Parsing
4
let p1: Person = (String::from("Alice"), 30).into();
Into wird via Methodensyntax auf dem Tuple aufgerufen
5
let p2: Person = Person::from("Bob,25");
Kann auch From direkt mit explizitem Typ verwenden