1 个不稳定版本
0.1.0 | 2023年11月28日 |
---|
#15 in #arc-mutex
用于 scalar_map
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
被重构,您仍然可以保持map
和and_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