4个版本 (1个稳定版)
1.0.0 | 2020年4月6日 |
---|---|
1.0.0-alpha.2 | 2019年11月21日 |
1.0.0-alpha.1 | 2019年9月23日 |
0.1.0-alpha.0 | 2019年9月20日 |
#6 in #des
62,803 每月下载量
用于 fehler
10KB
217 行
错误
错误是一个库,通过过程宏为Rust添加“抛出函数”支持。带有 throws
属性的函数返回 Result
,但默认使用“Ok”路径,您不需要将ok返回值包裹在 Ok
中。要抛出错误,请使用 ?
或 throws
宏。
错误提供以下项目
#[throws]
属性
throws属性修改一个函数或方法,使其返回一个 Result
。它接受一个可选的类型名作为属性的参数,该类型名将作为此函数的错误类型;如果没有提供类型名,则使用此crate的默认错误类型。
在函数体内,return
(包括隐式的最终返回)会自动“Ok包裹”。要引发错误,请使用 ?
或 throws!
宏。
例如,这两个函数是等价的
#[throws(i32)]
fn foo(x: bool) -> i32 {
if x {
0
} else {
throw!(1);
}
}
fn bar(x: bool) -> Result<i32, i32> {
if x {
Ok(0)
} else {
Err(1)
}
}
在返回 Option
的函数中
可以使用该属性使用 as Option
语法来制作返回 Option 的函数,如下所示
// This function returns `Option<i32>`
#[throws(as Option)]
fn foo(x: bool) -> i32 {
if x {
return 0;
} else {
throw!();
}
}
throw!
宏
throw!
是一个宏,其作用等同于 Err($e)?
模式。它接受一个错误类型并将其“抛出”。
throw!
宏的一个重要方面是它允许你在标记为 throws
的函数中返回错误。你无法直接从这些函数中返回错误,你需要使用这个宏。
TODO
- 让 throws 在闭包和异步块中工作(在稳定版本中不允许在表达式上使用属性)
- 让 throws 在除 Result 和 Option 之外的其他 Try 类型上工作(TRy 不在稳定版本中)。
许可证
根据以下任一许可证授权
- Apache 许可证 2.0 版(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则根据 Apache-2.0 许可证定义的,任何有意提交以包含在你工作的贡献,都将根据上述许可证双授权,不附加任何额外条款或条件。
依赖
~1.5MB
~36K SLoC