为什么有些生锈类型提供静态方法而不是对象方法?
看看Rc接口,我发现Rc
结构有方法,但它们没有定义为self
,所以它们是静态的,但实际上并没有阻止它们成为通常的对象方法。问题是为什么他们是这样定义的?为什么,例如,Rc::weak_count的形式定义:的为什么有些生锈类型提供静态方法而不是对象方法?
fn weak_count(this: &Rc<T>) -> usize
代替:
fn weak_count(&self) -> usize
回答:
这是为了防止阴影的方法,否则将通过Rc
的Deref
和DerefMut
实现可见。引述documentation of 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
的类型中增加一个固有方法将打破向后兼容性)。
以上是 为什么有些生锈类型提供静态方法而不是对象方法? 的全部内容, 来源链接: utcz.com/qa/265450.html