方法是與結(jié)構(gòu)體(struct)、枚舉(enum)或特征(trait)關(guān)聯(lián)的特殊函數(shù),
相當(dāng)于為類添加方法。
方法通過 impl 關(guān)鍵字定義,第一個參數(shù)通常是 &self,表示調(diào)用這個方法的實例。方法可以用點號(.)調(diào)用,類似其他語言中的對象方法。
Rust 的方法有幾個關(guān)鍵特點:
- 與類型綁定:方法屬于某個特定類型,而不是獨立存在。
- 借用實例:通過 &self,方法可以安全訪問實例的數(shù)據(jù)。
- 靈活調(diào)用:既能操作實例,也能定義不依賴實例的“關(guān)聯(lián)函數(shù)”。
方法和普通函數(shù)有什么區(qū)別?簡單來說,方法綁定到類型,在 impl 塊中定義,靠 &self 訪問實例,用.調(diào)用;而函數(shù)獨立存在,不需要實例,直接用函數(shù)名調(diào)用。讓我們從一個例子入手,感受一下。
結(jié)構(gòu)體方法
struct Spaceship {
fuel: u32,
speed: u32,
}
impl Spaceship {
// 關(guān)聯(lián)函數(shù):創(chuàng)建一艘新飛船
fn new(fuel: u32) -> Spaceship {
Spaceship { fuel, speed: 0 }
}
// 方法:報告狀態(tài)
fn status(&self) {
println!("飛船狀態(tài) - 燃料: {}, 速度: {}", self.fuel, self.speed);
}
// 方法:加速,增加速度并消耗燃料,需要修改數(shù)據(jù),需要使用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); // 用關(guān)聯(lián)函數(shù)創(chuàng)建實例
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();
}