学习 Rust 的时候,刚开始以为deref()
是直接实现解引用的,后来才发现deref()
是生成引用,然后配合*操作符实现的解引用。
既然这样,是不是该定义为 Ref trait 更直观一些
1
wule61 2023-12-19 15:54:15 +08:00 via Android
Rust 的 Deref trait 是用来重载解引用运算符(*)的。当你实现了 Deref trait ,你就可以使用 * 运算符来解引用你的类型。
Deref trait 的 deref 方法返回一个引用,然后 * 运算符可以用来解引用这个引用。这就是为什么你可能会觉得 deref 方法是生成引用的。 至于你的建议,将 Deref trait 改名为 Ref trait ,这个主要是语义和习惯的问题。在 Rust 中,Deref trait 的目的就是用来重载 * 运算符的,所以它的名字是 Deref (代表解引用)而不是 Ref (代表引用)。这是 Rust 的设计者们做出的决定,可能是因为他们觉得这样更符合 Rust 的语言习惯和设计理念。 |
2
Aih OP @wule61 从最终目的上讲,这么命名确实也没错;不清楚这个是我个人问题还是会普遍存在,在理解这一块的时候发生了误解。
也许 trait 还叫 Deref ,里面的方法叫 ref 更好? 当然这是我的个人看法。这个确实是个设计理念问题。 |
3
nebkad 2023-12-19 18:48:15 +08:00
Deref AsRef Borrow 都有相似的作用,叫做 Ref 很难区别其中的仔细差异
|