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"));