4 个版本
0.0.4 | 2020 年 8 月 28 日 |
---|---|
0.0.3 | 2020 年 5 月 18 日 |
0.0.2 | 2019 年 8 月 12 日 |
0.0.1 | 2018 年 11 月 21 日 |
#44 在 #result
在 plexus 中使用
13KB
270 行
愚者 是一个 Rust 库,用于 bool
和 Option
以及 Result
求和类型的互操作性。愚者还提供了布尔组合的宏,以及不要求 std
的布尔强制转换特质。
lib.rs
:
bool
和 Option
以及 Result
求和类型互操作性的特质。
愚者提供了 bool
和求和类型的扩展特质,以及 Option
和 Result
的布尔强制转换特质。 BoolExt
允许将 bool
流畅转换为求和类型。 IntoBool
允许使用 bool
、Option
和 Result
类型进行复合布尔谓词,并且具有隐式转换。
0.0.*
系列的版本是实验性的且不稳定的。
泛化匹配
在 Rust 1.46 中,Option::zip
API 被稳定化。愚者为 Rust 的先前版本提供了 OptionExt::zip_ext
,并在启用 zip
功能时提供了一个泛化的 zip
函数。该 zip
函数接受最多六个 Option
的元组,并将它们折叠成一个单个 Option
,如果所有输入都是 Some
。
与提议的 core
和 std
API 冲突
《BoolExt》和《OptionExt》中的一些扩展方法与Rust后续版本中添加到《core》和《std》的不稳定API相匹配。Fool通过使用《_ext》后缀来避免与这些API冲突,但可以通过《bare》功能特性包含这些API的裸名称。
使用裸扩展方法可能会导致升级到包含这些API的Rust工具链后出现错误,因为调用可能变得模糊。例如,BoolExt::then_some_ext
映射了bool::then_some
,在撰写本文时,它尚未成为稳定的API。
示例
使用then_ext
(或带有《bare》功能标志的then
)从布尔表达式创建一个Option
use fool::BoolExt;
use std::collections::HashSet;
let mut set = HashSet::new();
set.insert(10u32);
let message = set.contains(&10u32).then_ext(|| "Contains 10!".to_owned());
使用ok_or_else
和try运算符?
来返回错误
use fool::BoolExt;
struct Door {
is_open: bool,
}
impl Door {
pub fn close(&mut self) -> Result<(), ()> {
self.is_open().ok_or_else(|| ())?;
self.is_open = false;
Ok(())
}
pub fn is_open(&self) -> bool {
self.is_open
}
}
依赖关系
~110KB