mirror of
https://github.com/google/comprehensive-rust.git
synced 2024-12-17 23:23:43 +02:00
42 lines
1.3 KiB
Markdown
42 lines
1.3 KiB
Markdown
# Structs
|
|
|
|
Like C and C++, Rust has support for custom structs:
|
|
|
|
```rust,editable
|
|
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);
|
|
}
|
|
```
|
|
|
|
<details>
|
|
Key Points:
|
|
|
|
* Structs work like in C or C++.
|
|
* Like in C++, and unlike in C, no typedef is needed to define a type.
|
|
* Unlike in C++, there is no inheritance between structs.
|
|
* Methods are defined in an `impl` block, which we will see in following slides.
|
|
* 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.
|
|
* The next slide will introduce Tuple structs, used when the field names are not important.
|
|
* The syntax `..peter` 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.
|
|
|
|
</details>
|