- 实现
std::fmt::Display
trait 代码如下:
struct Point {
x: i32,
y: i32,
}
impl std::fmt::Display for Point {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "({}, {})", self.x, self.y)
}
}
fmt::Display
和fmt::Debug
的主要区别:
- 用途:
fmt::Display
用于格式化输出,主要面向最终用户,输出的格式通常是美观、易读的。例如,将数字格式化为货币形式,将日期格式化为人类可读的字符串等。像println!("{}", value)
就是使用fmt::Display
。
fmt::Debug
用于调试目的,输出的格式更注重包含对象的内部结构信息,方便开发者在调试时查看对象的详细状态。例如println!("{:?}", value)
使用的就是fmt::Debug
。
- 实现要求:
fmt::Display
的实现通常需要更多的业务逻辑,因为要考虑如何以用户友好的方式展示数据。
fmt::Debug
的实现相对简单,在结构体的所有字段都实现了Debug
trait 的情况下,可以使用derive
宏自动为结构体实现Debug
trait,例如#[derive(Debug)]
。