给定两种类型Tand U,&T将强制(隐式转换)为&U当且仅当T实现Deref<Target=U>
这允许我们做这样的事情:
fn foo(a: &[i32]) { // 代码 } fn bar(s: &str) { // 代码 } let v = vec![1, 2, 3]; foo(&v); // &Vec<i32> coerces into &[i32] because Vec<T> impls Deref<Target=[T]> let s = "Hello world".to_string(); let rc = Rc::new(s); // This works because Rc<T> impls Deref<Target=T> ∴ &Rc<String> coerces into // &String which coerces into &str. This happens as much as needed at compile time. bar(&rc);