#scalar #map #type #arc-mutex

scalar_map_derive

scalar_map 提供 derive 功能

1 个不稳定版本

0.1.0 2023年11月28日

#15 in #arc-mutex


用于 scalar_map

MIT 许可证

2KB

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))
    

自定义结构体

使用 derive

# 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

#[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));

依赖关系

~290–740KB
~18K SLoC