2 个版本
0.1.1 | 2019 年 12 月 30 日 |
---|---|
0.1.0 | 2019 年 12 月 30 日 |
#1130 在 数据结构
14KB
303 行
another-option
此包提供 Opt<T>
作为 Option<T>
的替代方案。为什么需要另一个选项?Opt
在以下情况下提供优势:
- 泛型类型
T
分配成本较高,并且 None
和Some(...)
之间频繁进行修改。
示例
由于 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
在以下情况下提供优势:
- 泛型类型
T
分配成本较高,并且 None
和Some(...)
之间频繁进行修改。
示例
由于 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"));