Rust Trait (2): From, Into
From<T>, Info<U> 是 Rust 中负责值与值转换的 trait.假设我们有这么一个自定义数据结构
1 2 3 4
| struct Person { name: String, age: usize, }
|
接下来,我们为这个自定义的结构体实现 From<&str>,表示从 &str 转换为 Person 结构体.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| impl From<&str> for Person { fn from(s: &str) -> Person { if s.is_empty() { return Person::default(); } let parts: Vec<&str> = s.split(',').collect(); if parts.len() != 2 { return Person::default(); } let name = parts[0]; if name.is_empty() { return Person::default(); } let age = parts[1].parse::<usize>(); match age { Ok(age) => Person { name: name.into(), age, }, Err(_) => Person::default(), } } }
|
这里值得注意的是,当我们实现了 T: From<U> 时,对 U 类型就会自动实现 U: Into<T>.
1 2
| let p1 = Person::from("Mark,20"); let p2: Person = "Gerald,70".into();
|