结构体

与 C 和 C++ 一样,Rust 支持自定义结构体:

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

fn describe(person: &Person) {
    println!("{} is {} years old", person.name, person.age);
}

fn main() {
    let mut peter = Person { name: String::from("Peter"), age: 27 };
    describe(&peter);

    peter.age = 28;
    describe(&peter);

    let name = String::from("Avery");
    let age = 39;
    let avery = Person { name, age };
    describe(&avery);

    let jackie = Person { name: String::from("Jackie"), ..avery };
    describe(&jackie);
}
This slide should take about 10 minutes.

关键点:

  • 结构体的运作方式与使用 C 或 C++ 时类似。
    • 不需要 typedef 即可定义类型,这与使用 C++ 类似,但与使用 C 不同。
    • 与使用 C++ 不同的是,结构体之间没有继承关系。
  • This may be a good time to let people know there are different types of structs.
    • Zero-sized structs (e.g. struct Foo;) might be used when implementing a trait on some type but don’t have any data that you want to store in the value itself.
    • 下一张幻灯片将介绍元组结构体,当字段名称不重要时使用。
  • If you already have variables with the right names, then you can create the struct using a shorthand.
  • The syntax ..avery allows us to copy the majority of the fields from the old struct without having to explicitly type it all out. It must always be the last element.