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> for
String 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)
归档时间: |
|
查看次数: |
2741 次 |
最近记录: |