错误处理
为什么要给错误类型(如 JsonError
) 实现 fmt::Display
trait?
在 Rust 中,fmt::Display trait
允许你定义一个类型如何被格式化为人类可读的字符串。这通常用于错误信息、日志记录或任何其他用户输出。实现 fmt::Display
需要定义 fmt
函数,该函数写入特定格式的数据到提供的 fmt::Formatter
中,并返回一个 fmt::Result
。
use std::fmt;
struct Point {
x: i32,
y: i32,
}
impl fmt::Display for Point {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
// 使用 write! 宏向 Formatter 写入格式化后的字符串
write!(f, "({}, {})", self.x, self.y)
}
}
fn main() {
let point = Point { x: 1, y: 2 };
println!("{}", point); // 当调用 println! 宏时,会自动调用 Point 类型的 fmt 方法
}
为什么要为 JsonError
实现 Error
trait?
- 兼容性:实现
Error
trait 使得JsonError
可以兼容 Rust 标准库中的错误处理工具和模式。这意味着任何期望一个实现了Error
trait 的类型的函数或库都可以使用JsonError
。 - 扩展性:通过实现
Error
trait,可以为JsonError
提供更多的上下文信息,如错误描述和错误来源,这使得错误调试和处理更为方便。 - 灵活性:实现了
Error
trait 的JsonError
可以很容易地与其他错误类型进行转换和包装,例如使用Result
类型或?
操作符来传播错误。