21.7 Matching Literals, Variables, and Ranges

You can match:

  • Literals: e.g., 1, "apple", false.
  • Constants: Named constants or static items.
  • Variables: Simple identifiers (match “anything,” binding it to the identifier).
  • Ranges (a..=b): Integer or character ranges, e.g., 4..=10.
fn classify_number(x: i32) {
    match x {
        1 => println!("One"),
        2 | 3 => println!("Two or three"), // OR patterns
        4..=10 => println!("Between 4 and 10 inclusive"),
        _ => println!("Something else"),
    }
}

fn main() {
    classify_number(1);
    classify_number(3);
    classify_number(7);
    classify_number(50);
}

21.7.1 Key Points

  • Wildcard Pattern (_): Catches all unmatched cases.
  • OR Pattern (|): Any sub-pattern matching is enough to select that arm.
  • Ranges: Valid for integers or chars; floating-point ranges aren’t supported in patterns.