Вместо того, чтобы выровнять вложенную опцию, как показывает другой ответ , я бы посоветовал вам никогда не создавать Option<Option<T>>
, которые вам нужно сперва сгладить,В большинстве случаев, которые я видел, это потому, что кто-то неправильно использует Option::map
, когда им следовало бы использовать Option::and_then
:
fn main() {
let input = user_input();
let a = input.map(add1);
// a is Option<Option<i32>>
let b = input.and_then(add1);
// a is Option<i32>
}
fn user_input() -> Option<i32> {
Some(10)
}
fn add1(a: i32) -> Option<i32> {
Some(a + 1)
}
Помните, что Rust - язык статической типизации;вы всегда будете знать точный уровень вложенности.