3个稳定版本
1.0.2 | 2024年1月10日 |
---|---|
1.0.1 | 2023年6月29日 |
#255 在 Rust模式
1,549 每月下载量
在 4 crates 中使用
13KB
103 行
通过过程宏为Rust添加对"抛出函数"的支持。标记为throws
的函数返回Result
,但默认使用"Ok"路径,你不需要将ok返回值包装在Ok
中。要抛出错误,请使用?
或throws
宏。
Der Fehler的分支,更新依赖项并修复问题,同时(据我所知)boats无法为开源项目做出贡献。
#[throws]
属性
throws属性修改一个函数或方法,使其返回一个Result
。它接受一个可选的typename作为属性的参数,该typename将是此函数的错误类型;如果没有提供typename,则使用此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 {
0
} else {
throw!();
}
}
throw!
宏
throw!
是一个宏,它与Err($e)?
模式等效。它接受一个错误类型并将其"抛出"。
《throw!》宏的一个重要方面是它允许你在标记为 throws
的函数内部返回错误。你不能仅仅从这些函数中 return
错误,你需要使用这个宏。
Rust 版本策略
此软件包仅支持 Rust 的当前稳定版本,补丁版本可以随时使用新功能。
许可证
根据以下任一许可证授权:
- 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 许可证定义的,您有意提交以包含在作品中的任何贡献,应按上述方式双许可,不附加任何额外的条款或条件。
依赖关系
~315–780KB
~19K SLoC