【Rust 知识点杂记】

1、self和Self

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

  1. self:

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

    • Self 是一个类型占位符 ,代表当前实现块(impl)所针对的具体类型。当你不想明确写出类型名称时,可以使用 Self 来代替。
    • 这个关键字通常用于返回值类型或者是泛型上下文中,当你希望指代具体的类型但又不想重复写类型名的时候。
rust 复制代码
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)
    }
}
相关推荐
M78佐菲4 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
无敌贵点大王7 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
是翎8 小时前
深度长文|2026产品经理AI实践手册
人工智能·深度学习·学习·自然语言处理·数据挖掘
Linux-lucky9 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
知识分享小能手9 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
mikuyyds11 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
AI职业加油站12 小时前
数据要素价值释放年:大数据治理工程师,站上职业新风口
人工智能·学习·职场和发展·数据分析·职场发展
qq_4523962312 小时前
第十四篇:《系统编程实战:用 Rust 编写高性能 HTTP 服务器》
rust
啄缘之间13 小时前
1.【SVA】什么是SVA?
经验分享·学习·测试用例·verilog·sva
sunoo-22913 小时前
【嵌入式裸机开发Day04】i.MX6ULL 蜂鸣器驱动详解:从引脚地址查找到代码实现全流程
arm开发·单片机·嵌入式硬件·学习·串口·裸机