mirror of
https://github.com/notohh/rustlings.git
synced 2024-11-23 06:02:23 -05:00
20 lines
1.6 KiB
Markdown
20 lines
1.6 KiB
Markdown
|
### Type conversions
|
||
|
|
||
|
|
||
|
Rust offers a multitude of ways to convert a value of a given type into another type.
|
||
|
|
||
|
The simplest form of type conversion is a type cast expression. It is denoted with the binary operator `as`. For instance, `println!("{}", 1 + 1.0);` would not compile, since `1` is an integer while `1.0` is a float. However, `println!("{}", 1 as f32 + 1.0)` should compile. The exercise [`using_as`](using_as.rs) tries to cover this.
|
||
|
|
||
|
Rust also offers traits that facilitate type conversions upon implementation. These traits can be found under the [`convert`](https://doc.rust-lang.org/std/convert/index.html) module.
|
||
|
The traits are the following:
|
||
|
- `From` and `Into` covered in [`from_into`](from_into.rs)
|
||
|
- `TryFrom` and `TryInto` covered in [`try_from_into`](try_from_into.rs)
|
||
|
- `AsRef` and `AsMut` covered in [`as_ref_mut`](as_ref_mut.rs)
|
||
|
|
||
|
Furthermore, the `std::str` module offers a trait called [`FromStr`](https://doc.rust-lang.org/std/str/trait.FromStr.html) which helps with converting strings into target types via the `parse` method on strings. If properly implemented for a given type `Person`, then `let p: Person = "Mark,20".parse().unwrap()` should both compile and run without panicking.
|
||
|
|
||
|
These should be the main ways ***within the standard library*** to convert data into your desired types.
|
||
|
|
||
|
#### Book Sections
|
||
|
|
||
|
These are not directly covered in the book, but the standard library has great documentation for [conversions here](https://doc.rust-lang.org/std/convert/index.html). The `FromStr` trait is also covered [here](https://doc.rust-lang.org/std/str/trait.FromStr.html).
|