在此示例代码from the Rust documentation中:
fn takes_str(s: &str) { }
let s = String::from("Hello");
takes_str(&s);
导致&s
成为&str
而不是&String
的幕后究竟是怎么回事?该文档似乎表明正在进行一些解除引用,但我认为*
用于解除引用,而不是&
?
答案 0 :(得分:3)
这里发生的事情称为deref coercions。这些允许引用实现Deref trait的类型来代替对其他类型的引用。如您的示例所示,&String
可以在需要&str
的任何地方使用,因为String
会将Deref
实现为str
。