为什么将 & 应用于字符串 return 是 &str?
Why does applying & to a String return a &str?
在此示例代码中 from the Rust documentation:
fn takes_str(s: &str) { }
let s = String::from("Hello");
takes_str(&s);
究竟是什么导致 &s
变成了 &str
而不是 &String
?文档似乎表明正在进行一些取消引用,但我认为 *
是用于取消引用,而不是 &
?
这里发生的事情叫做 deref coercions. These allow references to types that implement the Deref trait 用来代替对其他类型的引用。如您的示例所示,&String
可用于任何需要 &str
的地方,因为 String
将 Deref
实现为 str
。
在此示例代码中 from the Rust documentation:
fn takes_str(s: &str) { }
let s = String::from("Hello");
takes_str(&s);
究竟是什么导致 &s
变成了 &str
而不是 &String
?文档似乎表明正在进行一些取消引用,但我认为 *
是用于取消引用,而不是 &
?
这里发生的事情叫做 deref coercions. These allow references to types that implement the Deref trait 用来代替对其他类型的引用。如您的示例所示,&String
可用于任何需要 &str
的地方,因为 String
将 Deref
实现为 str
。