Метод and_then
Метод and_then вызывается у значения типа
Option<T> и принимает функцию, которая получает
значение из варианта Some и возвращает новый
Option<U>. Если исходный Option равен Some,
то вызывается переданная функция, и её результат
становится результатом метода. Если же исходный Option
равен None, функция не вызывается, и сразу
возвращается None. Этот метод удобен для
последовательного выполнения операций, каждая из
которых может вернуть Option, без появления
вложенных Some(Some(...)).
Синтаксис
Option::and_then(self, f)
Пример
Давайте применим метод and_then к значению
Some(2) с функцией, которая возвращает
Some(x * 10):
fn main()
{
let res = Some(2).and_then(|x| Some(x * 10));
println!("{:?}", res);
}
Результат выполнения кода:
Some(20)
Пример
Давайте применим метод and_then к значению
None - функция не будет вызвана, и результат
останется None:
fn main()
{
let res = None.and_then(|x: i32| Some(x * 10));
println!("{:?}", res);
}
Результат выполнения кода:
None
Пример
Давайте используем and_then для
последовательной цепочки операций, где каждая
функция возвращает Option:
fn main()
{
let res = Some("12345")
.and_then(|s| s.parse::<i32>().ok())
.and_then(|n| Some(n + 1));
println!("{:?}", res);
}
Результат выполнения кода:
Some(12346)
Смотрите также
-
класс
Option,
который представляет собой значение, которое может быть Some или None -
метод
map,
который преобразует значение внутри Some с помощью функции -
метод
or_else,
который возвращает альтернативный Option, если исходный равен None -
метод
filter,
который оставляет значение в Some только при выполнении условия