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());
}
Run Code Online (Sandbox Code Playgroud)
&str有Into<String>特质,所以我知道我可以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());
Run Code Online (Sandbox Code Playgroud)
在上述情况下,我无法理解String::from("test".to_string())即使String没有也可以成功调用From<String> for String。
但是,我认为
Person::new("test".to_string())失败是因为String没有自动派生From<String> forString Into` 。, so
实际上,From(因此Into)是自反的:
// https://doc.rust-lang.org/src/core/convert/mod.rs.html#545-549
impl<T> From<T> for T {
fn from(t: T) -> T {
t
}
}
Run Code Online (Sandbox Code Playgroud)