看看Rc接口,我发现Rcstruct有方法,但它们是没有定义的,self所以它们是静态的,但实际上并没有什么能阻止它们成为常用的对象方法.问题是为什么这样定义?例如,为什么Rc :: weak_count在表单中定义:
fn weak_count(this: &Rc<T>) -> usize
Run Code Online (Sandbox Code Playgroud)
代替:
fn weak_count(&self) -> usize
Run Code Online (Sandbox Code Playgroud)
它是为了防止通过Deref和DerefMut实现可见的阴影方法Rc.引用以下文档Rc:
固有的方法
Rc都是相关的功能,这意味着你必须将它们称为例如Rc::get_mut(&mut value)而不是value.get_mut().这避免了与内部类型的方法冲突T.
例如,如果您在Rc<Foo>其中Foo定义了自己的方法weak_count,则使用静态方法将允许用户写入foo.weak_count(…)调用Foo::weak_count和Rc::weak_count(&foo)调用Rc::weak_count.
(因此,将内部方法添加到定义Deref/ DerefMut将向后兼容的类型中).
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |