- &self
- 含义:表示对结构体实例的不可变借用。通过这种方式调用方法,不会获取结构体实例的所有权,也不能修改结构体的字段。
- 场景:当方法仅需要读取结构体的字段值,而不需要修改它们时使用。例如,实现一个获取结构体某个属性值的方法。
struct Point {
x: i32,
y: i32,
}
impl Point {
fn get_x(&self) -> i32 {
self.x
}
}
- &mut self
- 含义:表示对结构体实例的可变借用。使用这种方式调用方法,可以修改结构体的字段。同样不会获取结构体实例的所有权。
- 场景:当方法需要修改结构体内部状态时使用。比如,实现一个移动点坐标的方法。
struct Point {
x: i32,
y: i32,
}
impl Point {
fn move_point(&mut self, new_x: i32, new_y: i32) {
self.x = new_x;
self.y = new_y;
}
}
- self
- 含义:方法获取结构体实例的所有权。在方法内部,结构体实例的所有权被转移到方法中,方法结束后,原实例不再可用。
- 场景:当方法需要消耗结构体实例,并基于结构体的状态创建新的对象时使用。例如,将一个结构体转换为另一种数据类型,转换后原结构体不再需要。
struct Point {
x: i32,
y: i32,
}
impl Point {
fn into_tuple(self) -> (i32, i32) {
(self.x, self.y)
}
}