Введение
В этом лабе исследуется концепция связывания в Rust, которая позволяет косвенно обращаться к переменным и имеет возможность ветвления и использования этой переменной без повторного связывания. Сигил @ в инструкции match используется для связывания значений с именами. Приводятся примеры, в том числе как связывать значения с определенным диапазоном и как «разбирать» варианты enum, такие как Option.
Примечание: Если в лабе не указано имя файла, вы можете использовать любое имя файла, которое хотите. Например, вы можете использовать
main.rs, скомпилировать и запустить его с помощьюrustc main.rs &&./main.
Связывание
Косвенный доступ к переменной делает невозможным ветвление и использование этой переменной без повторного связывания. match предоставляет сигил @ для связывания значений с именами:
// Функция `age`, которая возвращает `u32`.
fn age() -> u32 {
15
}
fn main() {
println!("Расскажи, какой ты тип человека");
match age() {
0 => println!("Я еще не отмечал свой первый день рождения"),
// Можно напрямую `match` 1..= 12, но тогда какой возраст
// будет у ребенка? Вместо этого, привяжите к `n` для
// последовательности 1..= 12. Теперь возраст можно сообщить.
n @ 1 ..= 12 => println!("Я ребенок в возрасте {:?}", n),
n @ 13..= 19 => println!("Я подросток в возрасте {:?}", n),
// Ничего не привязано. Возвращаем результат.
n => println!("Я старый человек в возрасте {:?}", n),
}
}
Вы также можете использовать связывание для «разбора» вариантов enum, таких как Option:
fn some_number() -> Option<u32> {
Some(42)
}
fn main() {
match some_number() {
// Получен вариант `Some`, проверяем, равно ли его значение,
// привязанное к `n`, 42.
Some(n @ 42) => println!("Ответ: {}!", n),
// Проверяем любое другое число.
Some(n) => println!("Неинтересно... {}", n),
// Проверяем все остальное (`None` вариант).
_ => (),
}
}
Резюме
Поздравляем! Вы завершили лабу по Связыванию. Вы можете практиковаться в других лабах в LabEx, чтобы улучшить свои навыки.