Rust 的 Deref trait 是不是叫 Ref trait 更好一些

2023-12-19 15:23:27 +08:00
 Aih

学习 Rust 的时候,刚开始以为deref()是直接实现解引用的,后来才发现deref()是生成引用,然后配合*操作符实现的解引用。

既然这样,是不是该定义为 Ref trait 更直观一些

1140 次点击
所在节点    Rust
4 条回复
wule61
2023-12-19 15:54:15 +08:00
Rust 的 Deref trait 是用来重载解引用运算符(*)的。当你实现了 Deref trait ,你就可以使用 * 运算符来解引用你的类型。

Deref trait 的 deref 方法返回一个引用,然后 * 运算符可以用来解引用这个引用。这就是为什么你可能会觉得 deref 方法是生成引用的。

至于你的建议,将 Deref trait 改名为 Ref trait ,这个主要是语义和习惯的问题。在 Rust 中,Deref trait 的目的就是用来重载 * 运算符的,所以它的名字是 Deref (代表解引用)而不是 Ref (代表引用)。这是 Rust 的设计者们做出的决定,可能是因为他们觉得这样更符合 Rust 的语言习惯和设计理念。
Aih
2023-12-19 18:06:40 +08:00
@wule61 从最终目的上讲,这么命名确实也没错;不清楚这个是我个人问题还是会普遍存在,在理解这一块的时候发生了误解。

也许 trait 还叫 Deref ,里面的方法叫 ref 更好?

当然这是我的个人看法。这个确实是个设计理念问题。
nebkad
2023-12-19 18:48:15 +08:00
Deref AsRef Borrow 都有相似的作用,叫做 Ref 很难区别其中的仔细差异
Aih
2023-12-20 09:30:16 +08:00
@nebkad 我看了你说的这些 trait ,确实都有返回引用的行为;从这一点来看,从功能和特性上来命名是更好一些。这也更符合 trait 这个概念。

我从方法本身的功能上去理解确实狭隘了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1001663

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX