10 个版本 (稳定)
4.0.0 | 2022 年 3 月 22 日 |
---|---|
3.0.0 | 2021 年 1 月 29 日 |
2.0.2 | 2020 年 6 月 21 日 |
1.0.1 | 2019 年 2 月 25 日 |
0.9.0 | 2018 年 12 月 7 日 |
#2897 在 Rust 模式 中
每月 13,138 次下载
在 6 个 仓库中使用 (5 直接)
12KB
60 行
unchecked_unwrap
发布:
主分支:
警告 ⚠️
由于 Rust v1.58,这个软件包已无用处,请参阅
目录
描述
为 Rust 编程语言添加了 unwrap()
和 expect()
的无检查版本到 Option
和 Result
。支持 no_std
。
分支
用法
use unchecked_unwrap::UncheckedUnwrap;
let x = Some("air");
assert_eq!(unsafe { x.unchecked_unwrap() }, "air");
let x: Result<u32, &str> = Ok(2);
assert_eq!(unsafe { x.unchecked_unwrap() }, 2);
let x = Some("value");
assert_eq!(unsafe { x.unchecked_expect("the world is ending") }, "value");
let x: Result<u32, &str> = Ok(2);
assert_eq!(unsafe { x.unchecked_expect("the sky is falling down") }, 2);
checked | unchecked |
---|---|
fn test_checked(value: Option<&str>) -> &str {
value.unwrap()
}
|
fn test_unchecked(value: Option<&str>) -> &str {
unsafe { value.unchecked_unwrap() }
}
|
push rax
test rdi, rdi
je .LBB2_1 // panic handler
mov rdx, rsi
mov rax, rdi
pop rcx
ret
|
mov rdx, rsi
mov rax, rdi
ret
|
软件包功能
- debug_checks - 默认开启。当启用
cfg(debug-assertions)
时,启用正常的检查行为并在 panic 中抛出。
文档
文档可在上面的徽章链接中在线查看。
测试
使用起来非常简单,只需执行 cargo test
和 cargo test --release
即可。
基准测试
使用起来同样简单,只需执行 cargo bench
。目前需要Rust的夜间版本来进行基准测试。
以下是从GitHub Actions上运行CI的示例结果
test checked::expect_option ... bench: 798 ns/iter (+/- 90)
test checked::expect_result ... bench: 724 ns/iter (+/- 109)
test checked::unwrap_option ... bench: 802 ns/iter (+/- 52)
test checked::unwrap_result ... bench: 743 ns/iter (+/- 176)
test unchecked::expect_option ... bench: 407 ns/iter (+/- 93)
test unchecked::expect_result ... bench: 374 ns/iter (+/- 48)
test unchecked::unwrap_option ... bench: 345 ns/iter (+/- 53)
test unchecked::unwrap_result ... bench: 407 ns/iter (+/- 22)
替代方案
这两种选择以及这个crate非常相似,只是这个crate提供了可以通过cargo features切换的附加功能。有关详细信息,请参阅 crate features。
变更日志
有关详细信息,请参阅 CHANGELOG 文件。
许可协议
许可协议为以下之一
- Apache License,版本 2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
您可选择其中之一。
贡献
除非您明确声明,否则您根据Apache-2.0许可证定义的,有意提交以包含在本作品中的任何贡献,都将按照上述方式双许可,而不附加任何额外条款或条件。