欄位簡寫語法

如果您已有名稱相同的變數,可以透過簡寫 建立結構體:

#[derive(Debug)]
struct Person {
    name: String,
    age: u8,
}

impl Person {
    fn new(name: String, age: u8) -> Person {
        Person { name, age }
    }
}

fn main() {
    let peter = Person::new(String::from("Peter"), 27);
    println!("{peter:?}");
}
  • 您可以將 Self 用做型別來編寫 new 函式,因為它可和結構體型別名稱互通。

    #[derive(Debug)]
    struct Person {
        name: String,
        age: u8,
    }
    impl Person {
        fn new(name: String, age: u8) -> Self {
            Self { name, age }
        }
    }
  • 實作結構體的 Default 特徵。請定義部分欄位,並針對其他欄位使用預設值。

    #[derive(Debug)]
    struct Person {
        name: String,
        age: u8,
    }
    impl Default for Person {
        fn default() -> Person {
            Person {
                name: "Bot".to_string(),
                age: 0,
            }
        }
    }
    fn create_default() {
        let tmp = Person {
            ..Person::default()
        };
        let tmp = Person {
            name: "Sam".to_string(),
            ..Person::default()
        };
    }
  • 方法會在 impl 區塊中定義。

  • 使用結構體更新語法,利用 peter 定義新結構。請注意,peter 這個變數之後將再也無法存取。

  • 輸出結構體時,請使用 {:#?} 提出 Debug 表示法要求。