【Rust 知识点杂记】
1、self和Self
在Rust中,self
和 Self
有不同的含义和用法,它们通常出现在结构体、枚举或实现(impl
)块的上下文中。
-
self
:self
是一个关键字,它代表方法调用时实例本身的引用
。当在一个方法定义中使用self
作为第一个参数时,它表示该方法是通过某个特定类型的实例调用来触发的。self
可以带有不同的借用修饰符:&self
:借用实例的一个不可变引用。&mut self
:借用实例的一个可变引用。self
(没有借用符号):这意味着方法将获取实例的所有权,并且可能会消耗这个实例(例如,在析构函数中或者当需要转移所有权时)。
-
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)
}
}