为什么std :: rc :: Rc可以调用其自身值的方法?

问题描述 投票:0回答:1

我是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.
}
rust type-systems
1个回答
0
投票

此属性称为“ Deref coercion”。

如果您有两种类型的DerefT,例如U,那么在任何地方都有T: Deref<Target = U>时,您都可以强制&T。特别是,由于方法调用语法只是采用&U(或&self&mut self-取决于方法)的函数的糖,因此可以在仅具有selfU上调用方法。 >

正如您在文档中看到的,T,几乎适用于所有其他智能指针(Deref is implemented for Rc之类的“活动”智能指针,涉及显式锁定,是明显的异常)。因此,当您拥有这些智能指针之一时,可以将对其的引用视为对内部值的引用-有关此事实的其他后果,另请参见Deref

也可以在Rc中找到有关此主题的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.