Метод transpose
Метод transpose меняет местами вложенные типы
Option и Result. Он преобразует
значение типа Option<Result<T, E>> в значение
типа Result<Option<T>, E>. Если исходный
Option содержит Some(Ok(value)),
результатом будет Ok(Some(value)). Если
исходный Option содержит Some(Err(e)),
результатом будет Err(e). Если исходный
Option равен None, результатом
будет Ok(None). Метод не принимает
параметров и вызывается на значении типа
Option<Result<T, E>>.
Синтаксис
option.transpose()
Пример
Давайте преобразуем Some(Ok(5))
в Ok(Some(5)):
fn main()
{
let opt: Option<Result<i32, &str>> = Some(Ok(5));
let res = opt.transpose();
println!("{:?}", res);
}
Результат выполнения кода:
Ok(Some(5))
Пример
Давайте преобразуем Some(Err("error"))
в Err("error"):
fn main()
{
let opt: Option<Result<i32, &str>> = Some(Err("error"));
let res = opt.transpose();
println!("{:?}", res);
}
Результат выполнения кода:
Err("error")
Пример
Давайте преобразуем None
в Ok(None):
fn main()
{
let opt: Option<Result<i32, &str>> = None;
let res = opt.transpose();
println!("{:?}", res);
}
Результат выполнения кода:
Ok(None)