我的第一个 idea 是从Option中 Select map,但我不能从闭包内部 Select try!.match语句看起来没有必要,但我不知道如何简化它.

fn example<T, E>(val: Option<Result<T, E>>) -> Result<Option<T>, E> {
    Ok(match val {
        Some(v) => Some(v?),
        None => None
    })
}

推荐答案

在Rust 1.33中,transpose()是稳定的,所以你可以称之为:

fn main() {
    let x: Result<Option<i32>, ()> = Ok(Some(5));
    let y: Option<Result<i32, ()>> = Some(Ok(5));
    assert_eq!(x, y.transpose());
}

Rust相关问答推荐

为什么我需要在这个代码示例中使用&

如何指定不同的类型来常量Rust中的泛型参数?

如何在 struct 的自定义序列化程序中使用serde序列化_WITH

在决定使用std::Sync::Mutex还是使用Tokio::Sync::Mutex时,操作系统线程调度是考虑因素吗?

使用铁 rust S还原对多个数组执行顺序kronecker积

像这样的铁 rust 图案除了‘选项’之外,还有其他 Select 吗?

使用极点数据帧时,找不到枚举结果的方法lazy()

RUST应用程序正在退出,错误代码为:(退出代码:0xc0000005,STATUS_ACCESS_VIOLATION)

是否可以在不切换到下一个位置的情况下获得迭代器值:

从管道读取后重置标准输入

unwrap 选项类型出现错误:无法移出共享引用后面的*foo

Rust 打包在 .deb 中

使用在功能标志后面导入的类型,即使未启用功能标志

如何将 Rust 字符串转换为 i8(c_char) 数组?

为什么我可以同时传递可变和不可变引用?

使用部分键从 Hashmap 中检索值

如何使用 rust bindgen 生成的 std_vector

如何在 Rust 中创建最后一个元素是可变长度数组的 struct ?

如何异步记忆选项中的 struct 字段

Rust,我如何正确释放堆分配的内存?