#unwrap #expect #result #unchecked #options

no-std unchecked_unwrap

为 Option 和 Result 添加了 unwrap()expect() 的无检查版本。

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 日

#2897Rust 模式

Download history 1912/week @ 2024-03-13 2336/week @ 2024-03-20 1758/week @ 2024-03-27 2079/week @ 2024-04-03 1471/week @ 2024-04-10 2344/week @ 2024-04-17 1627/week @ 2024-04-24 1145/week @ 2024-05-01 1463/week @ 2024-05-08 1988/week @ 2024-05-15 1216/week @ 2024-05-22 2518/week @ 2024-05-29 2226/week @ 2024-06-05 2583/week @ 2024-06-12 3462/week @ 2024-06-19 4256/week @ 2024-06-26

每月 13,138 次下载
6 仓库中使用 (5 直接)

MIT/Apache

12KB
60

unchecked_unwrap

Crates.io Libraries.io Commits since License LoC

发布: 构建 文档

主分支: 构建 文档

警告 ⚠️

由于 Rust v1.58,这个软件包已无用处,请参阅

目录

描述

为 Rust 编程语言添加了 unwrap()expect() 的无检查版本到 OptionResult。支持 no_std

分支

  • 发布 - 仅用于发布。
  • 主分支 - 用于活跃开发、PR 和测试。

用法

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 testcargo 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-2.0许可证定义的,有意提交以包含在本作品中的任何贡献,都将按照上述方式双许可,而不附加任何额外条款或条件。

无运行时依赖

功能