Конструкция 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 возвратит строку "три".