6 个版本 (3 个破坏性更新)
使用旧的 Rust 2015
0.4.1 | 2018 年 4 月 10 日 |
---|---|
0.4.0 |
|
0.3.1 | 2018 年 3 月 13 日 |
0.2.0 | 2017 年 4 月 26 日 |
0.1.1 | 2016 年 12 月 30 日 |
#1630 在 Rust 模式 中
9KB
133 行
safe_unwrap
safe_unwrap 宏允许安全地解包并标注解包永远不会失败。
示例
#[macro_use]
extern crate safe_unwrap;
fn main() {
let res = Some(42);
// we know that unwrapping res will never fail, so it is safe to call unwrap
let val = safe_unwrap!("is constant value", res);
assert_eq!(val, 42);
}
在发布构建中,safe_unwrap!(expr)
等同于 expr.unwrap()
;在调试构建中,expect()
将调用一个消息,指出假设的不变量已被违反。
该 crate 不需要 std
。
lib.rs
:
手动检查解包
safe_unwrap 宏允许安全地解包并标注解包永远不会失败。
示例
#[macro_use]
extern crate safe_unwrap;
fn main() {
let res = Some(42);
// we know that unwrapping res will never fail, so it is safe to call unwrap
let val = safe_unwrap!("is constant value", res);
assert_eq!(val, 42);
}
在发布构建中,safe_unwrap!(expr)
等同于 expr.unwrap()
;在调试构建中,expect()
将调用一个消息,指出假设的不变量已被违反。
作为替代,对于 Result
和 Option
类型,你可以以较小的开销换取更简洁的语法
extern crate safe_unwrap;
use safe_unwrap::SafeUnwrap;
fn main() {
let res = Some(42);
// works only for Result and Option types
let val = res.safe_unwrap("is constant value");
assert_eq!(val, 42);
#[cfg(feature = "std")]
{
// With `std`, two additional methods are available.
let val = res.unwrap_or_abort("is constant value");
assert_eq!(val, 42);
let val = res.unwrap_or_exit("is constant value");
assert_eq!(val, 42);
}
}
.safe_unwrap
的语义与 safe_unwrap!
宏相同。这里的权衡是你必须依赖 LLVM 优化器来从生成的可执行文件中移除未使用的静态字符串 "is constant value"
(通常在发布模式下有效)。
std
支持
默认情况下,支持 no_std
。使用 std
功能,SafeUnwrap
有两个额外的函数,它们需要标准库。它们与 safe_unwrap
的工作方式相同,但
unwrap_or_abort
会终止进程而不是引发恐慌。unwrap_or_exit
会以代码 1 退出而不是引发恐慌。