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:
|
|
|
|
|
|
|
|
```rust,editable
|
|
|
|
fn main() {
|
|
|
|
let mut a: [i8; 10] = [42; 10];
|
|
|
|
a[5] = 0;
|
|
|
|
println!("a: {:?}", a);
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
Tuple assignment and access:
|
|
|
|
|
|
|
|
```rust,editable
|
|
|
|
fn main() {
|
|
|
|
let t: (i8, bool) = (7, true);
|
|
|
|
println!("1st index: {}", t.0);
|
|
|
|
println!("2nd index: {}", t.1);
|
|
|
|
}
|
|
|
|
```
|
2023-01-09 14:18:37 +00:00
|
|
|
|
|
|
|
<details>
|
2023-01-12 18:51:37 +01:00
|
|
|
|
2023-01-09 14:18:37 +00:00
|
|
|
Key points:
|
2023-01-12 18:51:37 +01:00
|
|
|
|
2023-01-09 14:18:37 +00:00
|
|
|
Arrays:
|
2023-01-12 18:51:37 +01:00
|
|
|
|
2023-01-12 11:26:48 +01:00
|
|
|
* Arrays have elements of the same type, `T`, and length, `N`, which is a compile-time constant.
|
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-09 14:18:37 +00:00
|
|
|
|
2023-01-12 11:26:48 +01:00
|
|
|
* We can use literals to assign values to arrays.
|
2023-01-09 14:18:37 +00:00
|
|
|
|
2023-01-12 18:51:37 +01:00
|
|
|
* In the main function, the print statement asks for the debug implementation with the `?` format
|
|
|
|
parameter: `{}` gives the default output, `{:?}` gives the debug output. We
|
|
|
|
could also have used `{a}` and `{a:?}` without specifying the value after the
|
|
|
|
format string.
|
2023-01-09 14:18:37 +00:00
|
|
|
|
2023-01-12 11:26:48 +01:00
|
|
|
* Adding `#`, eg `{a:#?}`, invokes a "pretty printing" format, which can be easier to read.
|
2023-01-09 14:18:37 +00:00
|
|
|
|
|
|
|
Tuples:
|
|
|
|
|
2023-01-12 11:26:48 +01:00
|
|
|
* Like arrays, tuples have a fixed length.
|
2023-01-09 14:18:37 +00:00
|
|
|
|
2023-01-12 11:26:48 +01:00
|
|
|
* Tuples group together values of different types into a compound type.
|
2023-01-09 14:18:37 +00:00
|
|
|
|
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
|
2023-01-23 11:04:38 +00:00
|
|
|
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.
|
2023-01-09 14:18:37 +00:00
|
|
|
|
|
|
|
</details>
|