#error #flip #map #options #methods #mapping #collection

try_map

try_mapflip 方法用于 Option。这些方法允许在将映射函数应用于返回 ResultOption 时进行更直观的错误处理。

4 个版本 (2 个破坏性更新)

使用旧的 Rust 2015

0.3.1 2018年2月27日
0.3.0 2018年2月27日
0.2.0 2016年12月14日
0.1.1 2016年12月14日

Rust 模式 中排名第 912

Download history 32905/week @ 2023-12-12 24466/week @ 2023-12-19 10761/week @ 2023-12-26 29339/week @ 2024-01-02 31745/week @ 2024-01-09 40215/week @ 2024-01-16 34586/week @ 2024-01-23 30133/week @ 2024-01-30 34036/week @ 2024-02-06 31519/week @ 2024-02-13 41944/week @ 2024-02-20 43912/week @ 2024-02-27 41467/week @ 2024-03-05 35283/week @ 2024-03-12 37616/week @ 2024-03-19 32910/week @ 2024-03-26

每月下载量 157,635
14 个crate中使用(通过 foundationdb-macros

Apache-2.0/MIT

10KB
151

try_map

更新:2018年2月20日 Rust 标准库将使用 transpose 来实现此功能,因此这个crate将逐渐被淘汰。跟踪问题在这里:https://github.com/rust-lang/rust/issues/47338

try_map 方法用于 Optionflip 方法用于 OptionVec。这些辅助方法允许在映射返回 Result 的函数时进行更直观的错误处理。

如何使用

添加到 Cargo.toml

[dependencies]
try_map = "0.3"

在您的代码中引入扩展特性:(FallibleMapExt 用于启用 try_mapFlipResultExt 用于启用 flip。)

use try_map::{FallibleMapExt, FlipResultExt};

像老板一样使用 try_mapflip 方法!

    fn try_map_example() -> Result<Option<i32>, &'static str> {
        let x = Some(42)
            .try_map(|x| Ok(x + 1))?
            .try_map(|x| Ok(x + 1))?
            .try_map(|x| if true { Err("oh noes") } else { Ok(x + 1) })?
            .try_map(|x| Ok(x + 1))?;
    
        Ok(x)
    }
    assert_eq!(try_map_example(), Err("oh noes"));

    fn flip_example() -> Result<Option<i32>, &'static str> {
        let x = Some(42)
            .map(|x| Ok(x + 1)).flip()?
            .map(|x| Ok(x + 1)).flip()?
            .map(|x| if true { Err("oh noes") } else { Ok(x + 1) }).flip()?
            .map(|x| Ok(x + 1)).flip()?;
    
        Ok(x)
    }
    assert_eq!(flip_example(), Err("oh noes"));

还有什么吗?

在 Rust RFC 存储库中有一个开放问题,建议将这些辅助方法引入标准库:https://github.com/rust-lang/rfcs/issues/1815 感谢 @killercup 提出在第三方 crate 中实现这些方法的建议。这样它们可以立即使用。(尽管如此,它们在标准库中仍然有用!)

看起来为了能够抽象提供 try_map 的特质以适用于不同类型的集合,我们需要支持高阶类型或关联类型构造函数。然而,似乎可以使用关联类型实现 flip 方法。

无运行时依赖