Rustlings: Live!
Goals:
Share knowledge
Ask Questions
Pair
Grow
Social Rules
https://www.recurse.com/manual
Have Fun!
What is an `enum`?
An enumeration, also referred to as enum is a simultaneous definition of a nominal enumerated type as well as a set of constructors, that can be used to create or pattern-match values of the corresponding enumerated type.
Simple Enums
enum Direction {
Up,
Down,
Left,
Right
}
Simple Enums
enum Direction {
Up,
Down,
Left,
Right
}
let move = Direction::Left;
Simple Enums
enum KeyboardControls { Quit, KeyPress { w: bool, a: bool, s: bool, d: bool },
Direction(String), Move(i32, i32), }
enum KeyboardControls { Quit, KeyPress { w: bool, a: bool, s: bool, d: bool },
Direction(String), Move(i32, i32), }
struct Quit; struct KeyPress { w: bool, a: bool, s: bool, d: bool } struct Direction(String); struct Move(i32, i32);
Enums vs Structs
Using Simple Enums
enum Direction { Up, Down, Left, Right } impl Direction { fn move_character(&self) { println!("{:?}", self); } }
Using Simple Enums
Option Enums
Rust doesn't have a concept of "null". The problem with null values is that if you try to use a null value as a not-null value, you’ll get an error of some kind. Because this null or not-null property is pervasive, it’s extremely easy to make this kind of error.
However, Rust has an enum that can encode the concept of a value being present or absent. This enum is Option<T>
Option Enums
enum Option<T> { Some(T), None, }
<T> means the Some variant of the Option enum can hold one piece of data of any type.
Option Enums
The compiler can’t infer the type that the Some variant will hold by looking only at a None value.
Option Enums
Option Enums
enum Colors { Red, Blue, Green, Yellow } fn hex_from_color(colors: Colors) -> String { match colors { Colors::Red => String::from("#FF0000"), Colors::Blue => String::from("#0000FF"), Colors:: Green => String::from("#00FF00"), Colors::Yellow => String::from("#FFFF00") } }
Option Enums
Option Enums
enum Colors { Red, Blue, Green, Yellow } fn hex_from_color(colors: Colors) -> String { match colors { Colors::Red => String::from("#FF0000"), Colors::Blue => String::from("#0000FF"), Colors:: Green => String::from("#00FF00"), Colors::Yellow => String::from("#FFFF00") } }
enum ShadesOfBlue { AliceBlue, Turqoise } enum Colors { ... Blue(ShadesOfBlue), } fn hex_from_color(colors: Colors) -> String { match colors { Colors::Blue(shade) => { println!("Shade of blue: {:?}", shade); String::from("#0000FF") } } }
Option Enums
Exercise
Solution
Let's Pair!
Rustlings
https://github.com/rust-lang/rustlings
Rustlings
Structs and Enums
$ rustlings run enums1
$ rustlings hint enums1
Complete Exercises
Enum 1, 2, 3
Rustlings: Live! Enum edition
By shortdiv
Rustlings: Live! Enum edition
In this deck we cover enums!
- 605