第六章 Rust 方法与函数

方法是与结构体(struct)、枚举(enum)或特征(trait)关联的特殊函数,相当于为类添加方法

方法通过 impl 关键字定义,第一个参数通常是 &self,表示调用这个方法的实例。方法可以用点号(.)调用,类似其他语言中的对象方法。

Rust 的方法有几个关键特点:

  • 与类型绑定:方法属于某个特定类型,而不是独立存在。
  • 借用实例:通过 &self,方法可以安全访问实例的数据。
  • 灵活调用:既能操作实例,也能定义不依赖实例的“关联函数”。

方法和普通函数有什么区别?简单来说,方法绑定到类型,在 impl 块中定义,靠 &self 访问实例,用.调用;而函数独立存在,不需要实例,直接用函数名调用。让我们从一个例子入手,感受一下。

结构体方法

struct Spaceship {
    fuel: u32,
    speed: u32,
}

impl Spaceship {
    // 关联函数:创建一艘新飞船
    fn new(fuel: u32) -> Spaceship {
        Spaceship { fuel, speed: 0 }
    }

    // 方法:报告状态
    fn status(&self) {
        println!("飞船状态 - 燃料: {}, 速度: {}", self.fuel, self.speed);
    }

    // 方法:加速,增加速度并消耗燃料,需要修改数据,需要使用mut
    fn accelerate(&mut self) {
        if self.fuel > 0 {
            self.speed += 10;
            self.fuel -= 5;
        }
    }

    // 方法:检查剩余燃料
    fn fuel_left(&self) -> u32 {
        self.fuel
    }
}

fn main() {
    let mut ship = Spaceship::new(50); // 用关联函数创建实例
    ship.status();
    ship.accelerate();
    println!("剩余燃料:{},速度:{}", ship.fuel_left(), ship.speed)
}

枚举方法

enum Command {
    Launch,         // 起飞
    Land,           // 降落
    Report(String), // 报告信息
}

impl Command {
    fn execute(&self) {
        match self {
            Command::Launch => println!("飞船起飞!"),
            Command::Land => println!("飞船降落!"),
            Command::Report(msg) => println!("报告: {}", msg),
        }
    }
}

fn main() {
    let cmd1 = Command::Launch;
    let cmd2 = Command::Report(String::from("燃料充足"));
    cmd1.execute();
    cmd2.execute();
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容