#标量 #映射 #类型 #互斥锁 #arc #arc-互斥锁 #选项

无 std 标量_映射

map 用于标量类型

5 个版本

0.1.4 2023 年 12 月 2 日
0.1.3 2023 年 11 月 28 日
0.1.2 2023 年 11 月 28 日
0.1.1 2023 年 11 月 28 日
0.1.0 2023 年 11 月 28 日

#986Rust 模式

每月 41 次下载

MIT 许可证

7KB
125

scalar_map

map 用于标量类型。

let num: Option<i32> = Some(42);
assert_eq!(num.map(|x| 42 - x), Some(0));

let num: i32 = 42;
assert_eq!(num.map(|x| 42 - x), 0);

let num: Option<i32> = Some(42);
assert_eq!(num.and_then(Option::Some), Some(0));

let num: i32 = 42;
assert_eq!(num.and_then(Option::Some), Some(0));

解决什么问题

  • 即使在将 Option 重新构建的情况下,您仍然可以保留 mapand_then

  • 您想要

    x.map(Mutex::new).map(Arc::new)
    

    ...而不是

    Arc::new(Mutex::new(x))
    

自定义结构体

派生

# Run this to add the `derive` feature
cargo add scalar_map --features derive
#[derive(Debug, PartialEq, ScalarMap)]
struct MyNum(i32);

let num = MyNum(42);
assert_eq!(num.map(|x| 42 - x.0).map(MyNum), MyNum(0));

不派生

#[derive(Debug, PartialEq)]
struct MyNum(i32);
impl ScalarMapExt for MyNum {}

let num = MyNum(42);
assert_eq!(num.map(|x| 42 - x.0).map(MyNum), MyNum(0));

依赖项

~105KB