MST
星途 面试题库

面试题:Rust结构体中self引用类型的区别及应用

在Rust中,self有`&self`、`&mut self`和`self`三种引用类型。请详细阐述这三种引用类型的区别,以及在何种情况下应分别使用它们,同时给出具体的结构体及方法代码示例来展示这些应用场景。
33.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. &self
    • 区别:这是对self的不可变引用。意味着在方法内部不能修改结构体的字段。
    • 适用场景:当方法只需要读取结构体的状态,而不需要修改它时使用。
    • 示例代码
struct Point {
    x: i32,
    y: i32,
}

impl Point {
    fn distance(&self, other: &Point) -> f64 {
        let dx = (self.x - other.x) as f64;
        let dy = (self.y - other.y) as f64;
        (dx * dx + dy * dy).sqrt()
    }
}
  1. &mut self
    • 区别:这是对self的可变引用。允许在方法内部修改结构体的字段。
    • 适用场景:当方法需要改变结构体的状态时使用。
    • 示例代码
struct Counter {
    value: i32,
}

impl Counter {
    fn increment(&mut self) {
        self.value += 1;
    }
    fn get_value(&self) -> i32 {
        self.value
    }
}
  1. self
    • 区别:这种方式会将所有权从调用者转移到方法内部。方法结束后,原调用者不能再使用该实例。
    • 适用场景:当方法需要接管结构体的所有权,并且可能会在方法内对结构体进行移动、消耗或返回修改后的结构体时使用。
    • 示例代码
struct StringWrapper {
    inner: String,
}

impl StringWrapper {
    fn into_inner(self) -> String {
        self.inner
    }
}