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();