#options #allocation #some #none

another-option

另一个选项数据类型;当分配成本较高时很有用

2 个版本

0.1.1 2019 年 12 月 30 日
0.1.0 2019 年 12 月 30 日

#1130数据结构

MIT 许可协议

14KB
303

another-option

此包提供 Opt<T> 作为 Option<T> 的替代方案。为什么需要另一个选项?Opt 在以下情况下提供优势:

  1. 泛型类型 T 分配成本较高,并且
  2. NoneSome(...) 之间频繁进行修改。

示例

由于 Rust 的内置 Option<T> 是一个枚举,当分配 None 时,它会丢弃其 Some(...) 值。

let mut option: Option<String> = Some(String::with_capacity(1024));
option = None; // drops the string
option = Some(String::with_capacity(1024)); // allocation

由于 Opt<T> 总是拥有值,即使在为空时,也可以重复使用该值而无需丢弃或分配

use crate::another_option::Opt;
let mut opt: Opt<String> = Opt::some(String::with_capacity(1024));
opt.map_in_place(|v| v.push_str("value"));
opt.set_none(); // does *not* drop the string
opt.set_some();
assert_eq!(opt.unwrap(), String::from("value"));

lib.rs:

another-option

此包提供 Opt<T> 作为 Option<T> 的替代方案。为什么需要另一个选项?Opt 在以下情况下提供优势:

  1. 泛型类型 T 分配成本较高,并且
  2. NoneSome(...) 之间频繁进行修改。

示例

由于 Rust 的内置 Option<T> 是一个枚举,当分配 None 时,它会丢弃其 Some(...) 值。

let mut option: Option<String> = Some(String::with_capacity(1024));
option = None; // drops the string
option = Some(String::with_capacity(1024)); // allocation

由于 Opt<T> 总是拥有值,即使在为空时,也可以重复使用该值而无需丢弃或分配

use crate::another_option::Opt;
let mut opt: Opt<String> = Opt::some(String::with_capacity(1024));
opt.map_in_place(|v| v.push_str("value"));
opt.set_none(); // does *not* drop the string
opt.set_some();
assert_eq!(opt.unwrap(), String::from("value"));

无运行时依赖