3个不稳定版本
使用旧的Rust 2015
0.2.0 | 2018年10月24日 |
---|---|
0.1.1 | 2017年12月15日 |
0.1.0 | 2017年11月13日 |
#1 in #fera
32 每月下载量
在 2 crate 中使用
13KB
255 行
fera-optional
可选值特质及其实现。
此crate是 fera
项目的一部分。
许可证
许可协议为 Mozilla Public License 2.0。贡献将在同一许可证下接受。
lib.rs
:
可选值特质及其实现。
此库有两个主要用途
- 在泛型代码中抽象可选值的表示(
Optional
特质); - 以空间高效的方式表示可选值(
OptionalBool
,OptionalMax
,OptionalMin
等)。
请注意,此库是补充而非替代 std::option::Option
的,其想法是通过将 Optional
值转换为 std::option::Option
值来使用 std::option::Option
接口。
optional
crate与此类似,但我们认为此模块更通用,主要是因为 optional
crate 不关注用途1。
可以通过 fera
crate 使用此crate。
示例
可以使用 OptionalMax<usize>
来表示一个可选的 usize
,其中 None
值由 usize::MAX
表示。
use fera_optional::*;
use std::mem;
assert_eq!(mem::size_of::<usize>(), mem::size_of::<OptionalMax<usize>>());
// default
let y = OptionalMax::<usize>::default();
assert_eq!(None, y.into_option());
// from a value
let x = OptionalMax::from(10usize);
assert_eq!(Some(&10), x.to_option_ref());
assert_eq!(10, *x.to_option_ref().unwrap());
// from an optional value
let z = Some(10);
let w = OptionalMax::from(z);
assert_eq!(Some(10), w.into_option());
使用 OptionalBool
use fera_optional::*;
use std::mem;
assert_eq!(1, mem::size_of::<OptionalBool>());
let mut x = OptionalBool::from(false);
assert!(!*x.to_option_ref().unwrap());
// change the value
*x.to_option_mut().unwrap() = true;
assert!(*x.to_option_ref().unwrap());
依赖
~155KB