当前位置: 首页 > article >正文

【Rust 知识点杂记】

1、self和Self

在Rust中,selfSelf 有不同的含义和用法,它们通常出现在结构体、枚举或实现(impl)块的上下文中。

  1. self:

    • self 是一个关键字,它代表方法调用时实例本身的引用。当在一个方法定义中使用 self 作为第一个参数时,它表示该方法是通过某个特定类型的实例调用来触发的。
    • self 可以带有不同的借用修饰符:
      • &self:借用实例的一个不可变引用。
      • &mut self:借用实例的一个可变引用。
      • self(没有借用符号):这意味着方法将获取实例的所有权,并且可能会消耗这个实例(例如,在析构函数中或者当需要转移所有权时)。
  2. Self:

    • Self 是一个类型占位符,代表当前实现块(impl)所针对的具体类型。当你不想明确写出类型名称时,可以使用 Self 来代替。
    • 这个关键字通常用于返回值类型或者是泛型上下文中,当你希望指代具体的类型但又不想重复写类型名的时候。
struct Point {
    x: f64,
    y: f64,
}

impl Point {
    // 构造函数,返回 Self 类型的新实例
    fn new(x: f64, y: f64) -> Self {
        Point { x, y }
    }

    // 方法,接收不可变引用 self
    fn distance_from_origin(&self) -> f64 {
        (self.x.powi(2) + self.y.powi(2)).sqrt()
    }

    // 方法,接收可变引用 self
    fn move_by(&mut self, dx: f64, dy: f64) {
        self.x += dx;
        self.y += dy;
    }

    // 方法,接收所有权 self
    fn into_polar(self) -> (f64, f64) {
        let r = (self.x.powi(2) + self.y.powi(2)).sqrt();
        let theta = (self.y / self.x).atan();
        (r, theta)
    }
}

http://www.kler.cn/a/469126.html

相关文章:

  • 使用WebSocket 获取实时数据
  • jenkins入门7 --发送邮件1
  • 将本地的 Git 仓库上传到 GitHub 上(github没有该仓库)
  • 【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列
  • 力扣23.合并K个升序链表
  • Ubuntu22.04配置静态ip
  • 微信小程序提示 miniprogram-recycle-view 引入失败
  • leetcode hot 100 最长递增子序列
  • 智能体语言 Shire 1.2 发布:自定义多文件编辑、Sketch 视图、流式 diff、智能上下文感知...
  • AI生成PPT,效率与创意的双重升级
  • 【开源免费】基于SpringBoot+Vue.JS精品在线试题库系统(JAVA毕业设计)
  • 开发小技巧分享 01:JSON解析工具
  • 入手51单片机的学习路径
  • Linux中的tcpdump抓包命令详解:抓取TCP和UDP数据包并按小时输出文件
  • 【MyBatis-Plus 进阶功能】开发中常用场景剖析
  • C++之STL
  • DeepSeek v3为何爆火?如何用其集成Milvus搭建RAG?
  • 数据库工程师进阶秘籍:云计算基础知识题目精选与答案(附PDF)
  • QT-------------对话框和多窗口程序设计
  • 《嵌入式系统:科技与艺术的交响曲》
  • Spark是什么?Flink和Spark区别
  • 【AI数学基础】线性代数:矩阵和线性变换
  • JVM之Java内存模型
  • c# 服务中启动exe窗体程序
  • 家用万兆网络实践:紧凑型家用服务器静音化改造(二)
  • Coroutine 基础四 —— CoroutineScope 与 CoroutineContext