1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-05-18 16:33:09 +02:00
comprehensive-rust/src/basic-syntax/compound-types.md

65 lines
2.0 KiB
Markdown
Raw Normal View History

2022-12-21 16:36:30 +01:00
# Compound Types
2022-12-28 15:41:08 +01:00
| | Types | Literals |
|--------|-------------------------------|-----------------------------------|
| Arrays | `[T; N]` | `[20, 30, 40]`, `[0; 3]` |
| Tuples | `()`, `(T,)`, `(T1, T2)`, ... | `()`, `('x',)`, `('x', 1.2)`, ... |
2022-12-21 16:36:30 +01:00
Array assignment and access:
<!-- mdbook-xgettext: skip -->
2022-12-21 16:36:30 +01:00
```rust,editable
fn main() {
let mut a: [i8; 10] = [42; 10];
a[5] = 0;
println!("a: {a:?}");
2022-12-21 16:36:30 +01:00
}
```
Tuple assignment and access:
<!-- mdbook-xgettext: skip -->
2022-12-21 16:36:30 +01:00
```rust,editable
fn main() {
let t: (i8, bool) = (7, true);
println!("t.0: {}", t.0);
println!("t.1: {}", t.1);
2022-12-21 16:36:30 +01:00
}
```
<details>
2023-01-12 18:51:37 +01:00
Key points:
2023-01-12 18:51:37 +01:00
Arrays:
2023-01-12 18:51:37 +01:00
* A value of the array type `[T; N]` holds `N` (a compile-time constant) elements of the same type `T`.
2023-01-12 18:51:37 +01:00
Note that the length of the array is *part of its type*, which means that `[u8; 3]` and
`[u8; 4]` are considered two different types.
2023-01-12 11:26:48 +01:00
* We can use literals to assign values to arrays.
* The `println!` macro asks for the debug implementation with the `?` format
parameter: `{}` gives the default output, `{:?}` gives the debug output. Types such as
integers and strings implement the default output, but arrays only implement the debug output.
This means that we must use debug output here.
2023-01-12 11:26:48 +01:00
* Adding `#`, eg `{a:#?}`, invokes a "pretty printing" format, which can be easier to read.
Tuples:
2023-01-12 11:26:48 +01:00
* Like arrays, tuples have a fixed length.
2023-01-12 11:26:48 +01:00
* Tuples group together values of different types into a compound type.
2023-01-12 18:51:37 +01:00
* Fields of a tuple can be accessed by the period and the index of the value, e.g. `t.0`, `t.1`.
* The empty tuple `()` is also known as the "unit type". It is both a type, and
the only valid value of that type - that is to say both the type and its value
are expressed as `()`. It is used to indicate, for example, that a function or
expression has no return value, as we'll see in a future slide.
* You can think of it as `void` that can be familiar to you from other
programming languages.
</details>