Конструкция match оценивает некоторое выражение и сравнивает его с набором значений. И совпадении значений выполняет определенный код.
Конструкция match имеет следующее формальное определение:
match выражение
{
значение1 => действия1,
значение2 => действия2,
.................
_ => действия,
}
После оператора match указывается сравниваемое выражение, например, переменная. Далее идет перечисление значений, с которыми идет сравнение.
После каждого значения после оператора => идут действия, которые выполняются, если это значение соответствует сравниваемому выражению.
В конце после всех значений указывается универсальное значение _, действия которого выполняются, если ни одно из значений не соответствуют сравниваемому выражению.
Например:
fn main(){
let num = 2;
match num
{
1=>println! ("один"),
2=>println! ("два"),
3=>println! ("три"),
_=>println! ("непонятно")
}
}
Здесь в конструкции match значение переменной num последовательно сравнивается со значениями 1, 2, 3. Поскольку переменная
num равна 2, то она соответствует значению
2=>println! ("два"),
Соответственно на консоль будет выведена строка "два".
Возьмем другую ситуацию:
fn main(){
let num = 23;
match num
{
1=>println! ("один"),
2=>println! ("два"),
3=>println! ("три"),
_=>println! ("непонятно")
}
}
Здесь значение переменной num не соответствует ни одному из значений в конструкции match, поэтому будет применяться код
_=>println! ("непонятно")
Конструкция match может возвращать значение. В этом случае мы можем присвоить его переменной:
fn main(){
let num = 3;
let result = match num
{
1=> "один",
2=> "два",
3=> "три",
_=> "непонятно"
};
println!("result = {}", result); // result = три
}
Здесь результат конструкции match присваивается переменной result. Возвращаемые значения указываются после оператора =>.
В данном случае это строки "один", "два", "три", "непонятно". Поскольку переменная num = 3, то конструкция match возвратит строку "три".