Цепочка разбора в Rust
Часто нужно, чтобы два необязательных
значения одновременно были заполнены.
Раньше для этого вкладывали один разбор
внутрь другого. В редакции 2024 годов
в одном условии можно поставить несколько
let подряд, соединив их знаком
&&.
Тело выполняется только когда каждый
разбор удался. Если хотя бы один
Option пуст, условие ложно и блок
пропускают. Так код читается в одну строку
без лишней вложенности.
Сложим два числа из заполненных вариантов:
fn main() {
let first = Some(2);
let second = Some(3);
if let Some(a) = first && let Some(b) = second {
println!("{}", a + b);
}
}
На экране 5. Оба разбора прошли,
поэтому сумма напечаталась. Если заменить
один из Some на пустой вариант,
блок не выполнится.
Цепочку можно сочетать с обычной проверкой
после &&:
fn main() {
let x = Some(10);
let y = Some(4);
if let Some(a) = x && let Some(b) = y && a > b {
println!("{}", a - b);
}
}
Даны две переменные:
let left = Some(8);
let right = Some(2);
Запишите условие с цепочкой разбора и выведите произведение, когда оба значения есть.
Даны две переменные:
let one = Some(1);
let two: Option<i32> = None;
Объясните, выполнится ли тело при такой
цепочке, и что изменится, если two
тоже станет Some.
Сравните цепочку в одном условии с двумя вложенными разборами: когда удобнее каждый способ.