Rust by Example | страница 31
Rust provides pattern matching via the match keyword, which can be used like a C switch. The first matching arm is evaluated and all possible values must be covered.
>fn main() {
>let number = 13;
>// TODO ^ Try different values for `number`
>println!("Tell me about {}", number);
>match number {
>// Match a single value
>1 => println!("One!"),
>// Match several values
>2 | 3 | 5 | 7 | 11 => println!("This is a prime"),
>// TODO ^ Try adding 13 to the list of prime values
>// Match an inclusive range
>13..=19 => println!("A teen"),
>// Handle the rest of cases
>_ => println!("Ain't special"),
>// TODO ^ Try commenting out this catch-all arm
>}
>let boolean = true;
>// Match is an expression too
>let binary = match boolean {
>// The arms of a match must cover all the possible values
>false => 0,
>true => 1,
>// TODO ^ Try commenting out one of these arms
>};
>println!("{} -> {}", boolean, binary);
>}
>הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
A match block can destructure items in a variety of ways.
Tuples can be destructured in a match as follows:
>fn main() {
>let triple = (0, -2, 3);
>// TODO ^ Try different values for `triple`
>println!("Tell me about {:?}", triple);
>// Match can be used to destructure a tuple
>match triple {
>// Destructure the second and third elements
>(0, y, z) => println!("First is `0`, `y` is {:?}, and `z` is {:?}", y, z),
>(1, ..) => println!("First is `1` and the rest doesn't matter"),
>// `..` can be the used ignore the rest of the tuple
>_ => println!("It doesn't matter what they are"),
>// `_` means don't bind the value to a variable
>}
>}
>הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה