6个版本 (破坏性)
0.5.0 | 2022年8月15日 |
---|---|
0.4.1 | 2022年6月29日 |
0.4.0 | 2021年10月24日 |
0.3.0 | 2021年10月18日 |
0.1.0 | 2021年10月7日 |
#326 in 数学
每月 55,000 次下载
在 130 个Crate中使用(通过 gstreamer)
110KB
2.5K SLoC
option-operations
option-operations
提供了特性和自动实现,以提高处理Option
时的算术操作可用性。
示例
处理两个Option
可能会导致冗长的表达式
let lhs = Some(1u64);
let rhs = Some(u64::MAX);
assert_eq!(
lhs.zip(rhs).map(|(lhs, rhs)| lhs.saturating_add(rhs)),
Some(u64::MAX),
);
得益于特OptionSaturatingAdd
,我们可以写出
assert_eq!(
lhs.opt_saturating_add(rhs),
Some(u64::MAX),
);
该特性也可以与内部类型一起使用
assert_eq!(
lhs.opt_saturating_add(u64::MAX),
Some(u64::MAX),
);
assert_eq!(
1.opt_saturating_add(rhs),
Some(u64::MAX),
);
针对Option<T>
的PartialOrd
的替代方案
另一个目的是解决Option<T>
的PartiaOrd
实现问题,该实现使用Option
变体的声明顺序。当None
出现在Some(_)
之前时,它会产生以下行为
let some_0 = Some(0);
let none: Option<u64> = None;
assert_eq!(none.partial_cmp(&some_0), Some(Ordering::Less));
assert_eq!(some_0.partial_cmp(&none), Some(Ordering::Greater));
在某些情况下,我们可能会认为None
反映的是一个未定义的值,因此不能与Some(_)
进行比较。
assert_eq!(none.opt_cmp(&some_0), None);
assert_eq!(some_0.opt_cmp(&none), None);
当然,这与其他常见的比较一致
assert_eq!(none.opt_lt(&some_0), None);
assert_eq!(none.opt_min(&some_0), None);
许可证
此Crate受以下之一的许可证约束
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- 麻省理工学院许可协议(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。