为什么申请&到一个String返回一个& str?

时间:2016-04-08 22:30:08

标签: string rust dereference

在此示例代码from the Rust documentation中:

fn takes_str(s: &str) { }

let s = String::from("Hello");

takes_str(&s);

导致&s成为&str而不是&String的幕后究竟是怎么回事?该文档似乎表明正在进行一些解除引用,但我认为*用于解除引用,而不是&

1 个答案:

答案 0 :(得分:3)

这里发生的事情称为deref coercions。这些允许引用实现Deref trait的类型来代替对其他类型的引用。如您的示例所示,&String可以在需要&str的任何地方使用,因为String会将Deref实现为str