結構體

與 C 和 C++ 一樣,Rust 支援自訂結構體:

struct Person {
    name: String,
    age: u8,
}

fn main() {
    let mut peter = Person {
        name: String::from("Peter"),
        age: 27,
    };
    println!("{} is {} years old", peter.name, peter.age);
    
    peter.age = 28;
    println!("{} is {} years old", peter.name, peter.age);
    
    let jackie = Person {
        name: String::from("Jackie"),
        ..peter
    };
    println!("{} is {} years old", jackie.name, jackie.age);
}

重點:

  • 結構體的運作方式與在 C 或 C++ 中類似。
    • 不需要 typedef 即可定義型別。這與 C++ 類似,但與 C 不同。
    • 與 C++ 不同的是,結構體之間沒有繼承關係。
  • 方法會在 impl 區塊中定義,我們將於接下來的投影片說明這點。
  • 不妨趁此機會讓學員瞭解還有幾種不同的結構體。
    • 針對某些型別實作特徵時,可能會使用大小為零的結構體 e.g., struct Foo;,但其中沒有任何需要儲存在值本身的資料。
    • 在下一張投影片中,我們會介紹元組結構體,可於欄位名稱不重要時使用。
  • ..peter 語法可讓我們從舊的結構體中複製大部分欄位,而不必明確輸入所有欄位。此元素一律須位於最後。