第六章 Rust 方法與函數(shù)

方法是與結(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();
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容