MST

星途 面试题库

面试题:Rust中结构体方法中self的不同形式及应用场景

在Rust结构体方法定义中,self有&self、&mut self和self这几种形式。请分别阐述这几种形式的含义,并且举例说明在什么样的业务场景下会使用到每种形式。
34.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. &self
    • 含义:表示对结构体实例的不可变借用。通过这种方式调用方法,不会获取结构体实例的所有权,也不能修改结构体的字段。
    • 场景:当方法仅需要读取结构体的字段值,而不需要修改它们时使用。例如,实现一个获取结构体某个属性值的方法。
struct Point {
    x: i32,
    y: i32,
}

impl Point {
    fn get_x(&self) -> i32 {
        self.x
    }
}
  1. &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;
    }
}
  1. self
    • 含义:方法获取结构体实例的所有权。在方法内部,结构体实例的所有权被转移到方法中,方法结束后,原实例不再可用。
    • 场景:当方法需要消耗结构体实例,并基于结构体的状态创建新的对象时使用。例如,将一个结构体转换为另一种数据类型,转换后原结构体不再需要。
struct Point {
    x: i32,
    y: i32,
}

impl Point {
    fn into_tuple(self) -> (i32, i32) {
        (self.x, self.y)
    }
}