gpt4 book ai didi

rust - 为什么有些 Rust 类型提供静态方法而不是对象方法?

转载 作者:行者123 更新时间:2023-11-29 08:03:46 28 4
gpt4 key购买 nike

查看 Rc interface 我发现 Rc 结构有方法,但它们是在没有 self 的情况下定义的,所以它们是静态的,但实际上没有什么能阻止它们成为通常的对象方法。问题是为什么要这样定义它们?为什么,例如,Rc::weak_count以以下形式定义:

fn weak_count(this: &Rc<T>) -> usize

代替:

fn weak_count(&self) -> usize

最佳答案

这是为了防止通过 Deref 可见的遮蔽方法和 DerefMut Rc 的实现.引用documentation of Rc :

The inherent methods of Rc are all associated functions, which means that you have to call them as e.g. Rc::get_mut(&mut value) instead of value.get_mut(). This avoids conflicts with methods of the inner type T.

例如,如果您有 Rc<Foo>其中 Foo定义了自己的方法 weak_count ,使用静态方法将允许用户编写 foo.weak_count(…)调用Foo::weak_countRc::weak_count(&foo)调用Rc::weak_count .

(出于这个原因,向定义 Deref/DerefMut 的类型添加内部方法将破坏向后兼容性)。

关于rust - 为什么有些 Rust 类型提供静态方法而不是对象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47993287/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com