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