MST
星途 面试题库

面试题:Rust中self关键字在方法定义中的常见用法有哪些

请阐述Rust中self关键字在结构体方法定义中的常见使用方式,并举例说明。例如在如下结构体定义基础上,添加使用self的方法:`struct Point { x: i32, y: i32 }`
13.6万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. self作为值参数(self
    • 这种方式会将结构体实例的值移动到方法中,方法可以修改结构体实例,但调用该方法后,原实例不能再被使用。
    • 示例:
struct Point {
    x: i32,
    y: i32
}

impl Point {
    fn move_to_origin(self) -> Point {
        Point { x: 0, y: 0 }
    }
}

fn main() {
    let mut p = Point { x: 10, y: 20 };
    let new_p = p.move_to_origin();
    // 这里p不能再被使用,因为它的值已经移动到move_to_origin方法中
}
  1. self作为可变引用(&mut self
    • 这种方式允许方法修改结构体的内部状态,同时结构体实例在方法调用后仍可使用。
    • 示例:
struct Point {
    x: i32,
    y: i32
}

impl Point {
    fn increment(&mut self) {
        self.x += 1;
        self.y += 1;
    }
}

fn main() {
    let mut p = Point { x: 10, y: 20 };
    p.increment();
    println!("x: {}, y: {}", p.x, p.y);
}
  1. self作为不可变引用(&self
    • 这种方式用于方法只需要读取结构体的状态,而不需要修改它。
    • 示例:
struct Point {
    x: i32,
    y: i32
}

impl Point {
    fn distance_from_origin(&self) -> f64 {
        (self.x.pow(2) + self.y.pow(2)) as f64).sqrt()
    }
}

fn main() {
    let p = Point { x: 3, y: 4 };
    let dist = p.distance_from_origin();
    println!("Distance from origin: {}", dist);
}