4 个版本 (1 个稳定版本)
1.0.0 | 2020年4月6日 |
---|---|
1.0.0-alpha.2 | 2019年11月21日 |
1.0.0-alpha.1 | 2019年9月23日 |
1.0.0-alpha.0 | 2019年9月20日 |
#2888 in Rust模式
62,791 每月下载量
用于 109 个crate (80 直接)
11KB
92 行
错误
错误是一个库,通过过程宏为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
的函数中
可以使用此属性将返回Option的函数转换为使用as 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
的函数中返回错误。您不能直接从这些函数中返回错误,您需要使用此宏。
待办事项
- 让throws在闭包和异步块中工作(在稳定版本中不允许在表达式上使用属性)
- 让抛出操作在除 Result 和 Option 类型之外的其他 Try 类型上也能工作(TRy 尚未稳定)。
许可证
根据以下任意一种许可证授权:
- Apache License, Version 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
约 35K SLoC