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