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 中使用

MPL-2.0 许可证

13KB
255

fera-optional

可选值特质及其实现。

此crate是 fera 项目的一部分。

Docs.rs Crates.io

许可证

许可协议为 Mozilla Public License 2.0。贡献将在同一许可证下接受。


lib.rs:

可选值特质及其实现。

此库有两个主要用途

  1. 在泛型代码中抽象可选值的表示(Optional 特质);
  2. 以空间高效的方式表示可选值(OptionalBoolOptionalMaxOptionalMin等)。

请注意,此库是补充而非替代 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