专栏首页Rust语言学习交流【Rust问答】关于Deref, 使&&T变成&T的疑问

【Rust问答】关于Deref, 使&&T变成&T的疑问

目前知道rust会使&&&&T这种类型归一化, 使用时最终会变成一个&, 感觉这是deref在起作用, 所以翻看源码, 看到如下的系统实现:

#[stable(feature = "rust1", since = "1.0.0")]
impl<T: ?Sized> Deref for &T {
    type Target = T;

    fn deref(&self) -> &T { *self }
}

我看理解是把&T, 转成了&T, 如果是&&T, 相当于&(&T), 转后应该还是&(&T)啊, 为什么会少一个&呢? 如果是理解成&(&T)当成&self, 那么self = &T, 而返回的是*self, 那应该返回是T类型啊, 为什么返回时&T呢, 始终感觉返回值这里应该是self, 而不是*self.

------

网友回答:

laizy 2019-12-02 10:48

fn deref(&self) -> &T { *self } <==> fn deref(self: &Self) -> &T { *self } <==> fn deref(self: &&T) -> &T { *self }

作者 x378320002 2019-12-02 11:01

懂了, 之前理解方法签名中&self有误, 应该是self: &Self的意思, thanks

kylidboy 2019-12-02 16:15

self是个特殊的玩意儿,哈哈

本文分享自微信公众号 - Rust语言学习交流(rust-china),作者:x378320002

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【大家的项目】Rbatis - 制作 Rust 语言堪比 Mybatis 的异步 ORM 框架

    因为是复刻Java系的Mybatis,因此框架暂命名 Rbatis。小部分功能还在进行中。github链接https://github.com/rbatis/r...

    MikeLoveRust
  • 自己写的一个 json parser

    之前看到知乎上有人问,会写Parser, Tokenizer是什么水平,绝大情况下,屁用没有。小部分情况,就看你运气了。因为这东西,面试又不会加分,而且,如果你...

    MikeLoveRust
  • 【Rust每周一知】 一种 Rust 设计模式

    大体意思就是,B 是一个类型,它接受一个泛型作为它的形参,然后“盗用”了它的实参的方法。

    MikeLoveRust
  • 致青春--Python实现俄罗斯方块

    俄罗斯方块游戏是世界上最流行的游戏之一。是由一名叫Alexey Pajitnov的俄罗斯程序员在1985年制作的,从那时起,这个游戏就风靡了各个游戏平台,而且俄...

    PM小王
  • Python魔术方法-Magic Method

    目录[-] 介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,例如类的初始化方法 __init__ ,Pyt...

    jhao104
  • 从item-base到svd再到rbm多种协同过滤算法从原理到实现

    一.引入 一直想写一篇关于推荐系统的文章总结下,这次借着完善DML写一下,权当是总结了。不过真正的推荐系统当然不会这么简单,往往是很多算法交错...

    机器学习AI算法工程
  • python 长连接 mysql数据库

    python链接mysql中没有长链接的概念,但我们可以利用mysql的ping机制,来实现长链接功能

    py3study
  • Seleninum&PhamtomJS爬取煎蛋网妹子图

    mylog.py  日志模块,记录一些爬取过程中的信息,在大量爬取的时候,没有log帮助定位,很难找到错误点

    py3study
  • 利用Python编写一个行业专用的小计算器

    前言:本文讲述的是如何利用python编程制作一个适用于指定行业的计算器,方便计算结果,涵盖的知识点由Python编写GUI界面程序,利用爬虫采集实时的汇率数据...

    用户7886150
  • Python实现系统桌面时钟

    用Python + PyQT写的一个系统桌面时钟,刚学习Python,写的比较简陋,但是基本的功能还可以。

    py3study

扫码关注云+社区

领取腾讯云代金券