MST

星途 面试题库

面试题:Rust 控制台输出的自定义格式化实现

假设你有一个自定义结构体`Point`,包含`x`和`y`两个`i32`类型的字段。请实现`std::fmt::Display` trait,以便使用`println!`宏以`(x, y)`的格式输出`Point`实例。并说明`fmt::Display`和`fmt::Debug`的主要区别。
36.8万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

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