We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
每个语言都有自己的错误处理,例如:C的errno、C++的try-catch、golang的error interface。 rust也有自己的错误处理,考虑自身语言的特点和几种错误处理的情况,rust使用Error这个trait结合Result这个枚举类型实现。
Error
Result
用作函数的返回,通过match、unwrap、 unwrap_or 、 ? 处理结果。
match
unwrap
unwrap_or
?
pub enum Result<T, E> { Ok(T), Err(E), }
// 调试用 pub trait Debug { // Required method fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>; } // 友好输出用 pub trait Display { // Required method fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>; } pub trait Error: Debug + Display { // Provided methods fn source(&self) -> Option<&(dyn Error + 'static)> { ... } fn description(&self) -> &str { ... } fn cause(&self) -> Option<&dyn Error> { ... } fn provide<'a>(&'a self, request: &mut Request<'a>) { ... } }
Debug 和 Display 是 Rust 标准库中的两个不同的 trait,它们都用于定义如何将类型转换为字符串进行输出,但它们有不同的用途和语义。
Debug
Display
一种类型转换为另一种类型
pub trait From<T>: Sized { // Required method fn from(value: T) -> Self; }
https://crates.io/crates/thiserror 该项目通过宏可以自动实现Error和From trait。
thiserror 宏库提供了几个宏,用于定义和定制自定义错误类型。以下是 thiserror 中最常用的宏及其作用:
std::error::Error::source
From
https://crates.io/crates/anyhow 用作函数的返回类型,anyhow::Error封装了dyn std::error::Error。
anyhow::Error
dyn std::error::Error
通过实现From trait支持通过?把错误传播到调用函数,无需主动做类型转换。 通过实现Error trait的source方法,在外层调用函数中调用source显示内部错误。
source
参考: https://baoyachi.github.io/Rust/rust_error_handle.html
The text was updated successfully, but these errors were encountered:
No branches or pull requests
概述
每个语言都有自己的错误处理,例如:C的errno、C++的try-catch、golang的error interface。
rust也有自己的错误处理,考虑自身语言的特点和几种错误处理的情况,rust使用
Error
这个trait结合Result
这个枚举类型实现。实现
std::result::Result
用作函数的返回,通过
match
、unwrap
、unwrap_or
、?
处理结果。std::error::Error
Debug
和Display
是 Rust 标准库中的两个不同的 trait,它们都用于定义如何将类型转换为字符串进行输出,但它们有不同的用途和语义。std::convert::From
一种类型转换为另一种类型
thiserror
https://crates.io/crates/thiserror
该项目通过宏可以自动实现Error和From trait。
thiserror 宏库提供了几个宏,用于定义和定制自定义错误类型。以下是 thiserror 中最常用的宏及其作用:
Display
trait。std::error::Error::source
方法。From
trait,使得可以使用?
操作符自动转换错误类型。anyhow
https://crates.io/crates/anyhow
用作函数的返回类型,
anyhow::Error
封装了dyn std::error::Error
。总结
通过实现
From
trait支持通过?
把错误传播到调用函数,无需主动做类型转换。通过实现
Error
trait的source
方法,在外层调用函数中调用source显示内部错误。参考:
https://baoyachi.github.io/Rust/rust_error_handle.html
The text was updated successfully, but these errors were encountered: