struct Person {
name: String,
}
impl Person {
fn new<S: Into<String>>(name: S) -> Person {
Person { name: name.into() }
}
}
fn main() {
let person = Person::new("test");
let person = Person::new("test".to_string());
}
&str
拥有Into<String>
trait,因此我理解我可以正确地调用Person::new("test")
。
但是,我认为Person::new("test".to_string())
会失败,因为String
没有From<String> for String
,所以Into<String>
不能自动派生。
为什么我可以调用Person::new("test".to_string())
?
此外,我也可以调用以下代码:
let test: String = String::from("test".to_string());
在上述情况下,即使
String
没有实现 From<String> for String
,我仍然可以成功调用 String::from("test".to_string())
,这一点我无法理解。
Into
是自反的,也就是说对于T
,实现了Into<T>
。_ - John Ledbetterfn new<S>(name: S) -> Person where S : Into<String>
,以使声明更紧凑。 - tadmanfn new(name: impl Into<String>)
- Ibraheem Ahmed