Bird
Raised Fist0
Rustprogramming~5 mins

Match with enums in Rust - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is an enum in Rust?
An enum (short for enumeration) in Rust is a type that can be one of several different variants. It lets you define a type by listing its possible values.
Click to reveal answer
beginner
How does the match statement work with enums in Rust?
The match statement compares a value against patterns. When used with enums, it lets you run different code depending on which variant the enum value is.
Click to reveal answer
intermediate
What happens if you don’t cover all enum variants in a match?
Rust will give a compile-time error because match must be exhaustive. You must handle every possible variant or use a catch-all pattern like _.
Click to reveal answer
intermediate
How can you extract data from enum variants in a match?
If enum variants hold data, you can use pattern matching to bind that data to variables inside the match arms for use.
Click to reveal answer
beginner
Example: What does this code print?<br><pre>enum Color { Red, Green, Blue }<br>let c = Color::Green;<br>match c {<br>  Color::Red =&gt; println!("Red"),<br>  Color::Green =&gt; println!("Green"),<br>  Color::Blue =&gt; println!("Blue"),<br>}</pre>
It prints Green because the variable c is set to Color::Green and the match arm for Color::Green runs.
Click to reveal answer
What keyword is used to compare enum variants in Rust?
Aif
Bmatch
Cswitch
Dcase
What must a match statement do when matching an enum?
AHandle all possible variants
BHandle only one variant
CIgnore unmatched variants
DUse a loop
How do you write a catch-all pattern in a match?
A_
Bdefault
Celse
Dany
If an enum variant holds data, how do you access it in a match?
ABy using a loop
BBy calling a method
CBy casting the enum
DBy binding variables in the pattern
What will this code print?
enum Direction { Up, Down }
let d = Direction::Down;
match d {
Direction::Up => println!("Up"),
Direction::Down => println!("Down"),
}
AError
BUp
CDown
DNothing
Explain how the match statement works with enums in Rust.
Think about how you choose actions based on different enum options.
You got /4 concepts.
    Describe what happens if you forget to handle an enum variant in a match.
    Rust wants you to be sure you covered every case.
    You got /3 concepts.

      Practice

      (1/5)
      1.

      What does the match statement do when used with enums in Rust?

      easy
      A. It checks the enum variant and runs the matching code block.
      B. It converts the enum into a string automatically.
      C. It creates a new enum variant.
      D. It deletes the enum variant from memory.

      Solution

      1. Step 1: Understand the purpose of match with enums

        The match statement compares the enum value against each variant.
      2. Step 2: Identify what happens on a match

        When a variant matches, the corresponding code block runs.
      3. Final Answer:

        It checks the enum variant and runs the matching code block. -> Option A
      4. Quick Check:

        Match runs code by enum variant [OK]
      Hint: Match arms correspond to enum variants directly [OK]
      Common Mistakes:
      • Thinking match converts enums to strings
      • Assuming match creates or deletes variants
      • Confusing match with if-else statements
      2.

      Which of the following is the correct syntax to match an enum Color with variants Red, Green, and Blue?

      enum Color { Red, Green, Blue }
      easy
      A. match color { Color.Red => {}, Color.Green => {}, Color.Blue => {} }
      B. match color { Red => {}, Green => {}, Blue => {} }
      C. match color { Color::Red => {}, Color::Green => {}, Color::Blue => {} }
      D. match color { 'Red' => {}, 'Green' => {}, 'Blue' => {} }

      Solution

      1. Step 1: Recall enum variant syntax in match

        Enum variants must be prefixed with the enum name and double colon, like Color::Red.
      2. Step 2: Check each option's syntax

        Only match color { Color::Red => {}, Color::Green => {}, Color::Blue => {} } uses the correct Color::Variant syntax.
      3. Final Answer:

        match color { Color::Red => {}, Color::Green => {}, Color::Blue => {} } -> Option C
      4. Quick Check:

        Enum variants use EnumName::Variant [OK]
      Hint: Use EnumName::Variant in match arms [OK]
      Common Mistakes:
      • Omitting enum name prefix
      • Using dot instead of double colon
      • Using strings instead of variants
      3.

      What will be the output of this Rust code?

      enum Direction { North, South, East, West }
      
      fn main() {
          let dir = Direction::East;
          let message = match dir {
              Direction::North => "Going up",
              Direction::South => "Going down",
              Direction::East => "Going right",
              Direction::West => "Going left",
          };
          println!("{}", message);
      }
      medium
      A. Going right
      B. Going up
      C. Going left
      D. Going down

      Solution

      1. Step 1: Identify the enum variant assigned

        The variable dir is set to Direction::East.
      2. Step 2: Match dir to the correct message

        The match arm for Direction::East returns "Going right".
      3. Final Answer:

        Going right -> Option A
      4. Quick Check:

        Direction::East matches "Going right" [OK]
      Hint: Match returns value for the exact enum variant [OK]
      Common Mistakes:
      • Mixing up enum variants and their messages
      • Forgetting to use EnumName::Variant in match
      • Assuming default or fallback arm runs
      4.

      Find the error in this Rust code snippet using match with enums:

      enum Status { Success, Failure }
      
      fn check(status: Status) {
          match status {
              Status::Success => println!("Success"),
              // Missing Failure arm
          }
      }
      medium
      A. Missing semicolon after println! macro
      B. Function check should return a value
      C. Incorrect enum variant syntax
      D. Missing match arm for Status::Failure

      Solution

      1. Step 1: Check completeness of match arms

        The match statement covers Status::Success but misses Status::Failure.
      2. Step 2: Understand Rust's exhaustiveness requirement

        Rust requires all enum variants to be matched or a catch-all arm (_) to avoid compile errors.
      3. Final Answer:

        Missing match arm for Status::Failure -> Option D
      4. Quick Check:

        All enum variants must be matched [OK]
      Hint: Match must cover all enum variants or use _ arm [OK]
      Common Mistakes:
      • Leaving out enum variants in match arms
      • Assuming partial match compiles
      • Confusing semicolon placement with match completeness
      5.

      Given this enum with data:

      enum Message {
          Quit,
          Move { x: i32, y: i32 },
          Write(String),
          ChangeColor(i32, i32, i32),
      }

      Which match arm correctly extracts the x and y values from Message::Move?

      hard
      A. Message::Move(x, y) => println!("x: {}, y: {}", x, y),
      B. Message::Move { x, y } => println!("x: {}, y: {}", x, y),
      C. Message::Move(x: x, y: y) => println!("x: {}, y: {}", x, y),
      D. Message::Move(x: x, y) => println!("x: {}, y: {}", x, y),

      Solution

      1. Step 1: Identify the enum variant with named fields

        Move uses named fields { x: i32, y: i32 }.
      2. Step 2: Match syntax for named fields

        Use Message::Move { x, y } to destructure named fields directly.
      3. Final Answer:

        Message::Move { x, y } => println!("x: {}, y: {}", x, y), -> Option B
      4. Quick Check:

        Named fields use braces and field names [OK]
      Hint: Use braces and field names to destructure named fields [OK]
      Common Mistakes:
      • Using tuple pattern for struct-like variant
      • Mixing colon syntax incorrectly
      • Omitting braces for named fields
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard