我是Rust和类型系统的新手。我正在阅读rustc/rc.rs。我不知道为什么Rc<T>
可以调用T的方法。 a Structure<T>
对于包装值的调用方法满足什么条件?
use std::rc::Rc;
fn main() {
let a = Rc::new("The quick fox".to_string());
println!("{}", a.contains("white")); // Rc<String> can call String#contains.
}
此属性称为“ Deref
coercion”。
如果您有两种类型的Deref
和T
,例如U
,那么在任何地方都有T: Deref<Target = U>
时,您都可以强制到&T
。特别是,由于方法调用语法只是采用&U
(或&self
或&mut self
-取决于方法)的函数的糖,因此可以在仅具有self
的U
上调用方法。 >
正如您在文档中看到的,T
,几乎适用于所有其他智能指针(Deref
is implemented for Rc
之类的“活动”智能指针,涉及显式锁定,是明显的异常)。因此,当您拥有这些智能指针之一时,可以将对其的引用视为对内部值的引用-有关此事实的其他后果,另请参见Deref
。
也可以在Rc
中找到有关此主题的更多信息。