考虑以下示例:
fn main() {
let string: String = "A string".to_string();
let string_ref: &String = &string;
let str_ref_a: &str = string_ref; // A
let str_ref_b: &str = &string; // B
}
这两行代码有什么不同呢?string_ref
是&String
类型,因此我理解在第A行中我们使用了Deref coercion。那么第B行呢?可以说它与Deref coercion无关,只是因为这个原因直接借用了一个String
作为str
吗?
impl Borrow<str> for String {
#[inline]
fn borrow(&self) -> &str {
&self[..]
}
}
impl Borrow<str> for String
的目的是什么?在什么情况下会调用它的borrow()
函数?可以说字符串中的 deref coercion 使得对string.borrow()
的显式调用有些无意义吗? - at54321Deref
trait 中的Target
也可以是泛型类型(不一定是具体类型)。书中的代码示例展示了Deref
的实现。 - Ham