为什么将 & 应用于字符串 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 的地方,因为 StringDeref 实现为 str