V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Aih
V2EX  ›  Rust

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

  •  
  •   Aih · 2023-12-19 15:23:27 +08:00 · 1137 次点击
    这是一个创建于 367 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    4 条回复    2023-12-20 09:30:16 +08:00
    wule61
        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 的语言习惯和设计理念。
    Aih
        2
    Aih  
    OP
       2023-12-19 18:06:40 +08:00
    @wule61 从最终目的上讲,这么命名确实也没错;不清楚这个是我个人问题还是会普遍存在,在理解这一块的时候发生了误解。

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

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

    我从方法本身的功能上去理解确实狭隘了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5284 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 08:27 · PVG 16:27 · LAX 00:27 · JFK 03:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.