结构体
与 C 和 C++ 一样,Rust 支持自定义结构体:
1. struct Person {
2. name: String,
3. age: u8,
4. }
6. fn describe(person: &Person) {
7. println!("{} is {} years old", person.name, person.age);
8. }
10. fn main() {
11. let mut peter = Person { name: String::from("Peter"), age: 27 };
12. describe(&peter);
14. peter.age = 28;
15. describe(&peter);
17. let name = String::from("Avery");
18. let age = 39;
19. let avery = Person { name, age };
20. describe(&avery);
22. let jackie = Person { name: String::from("Jackie"), ..avery };
23. describe(&jackie);
24. }
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
..averyallows 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.
