MST

星途 面试题库

面试题:Rust中自定义Debug格式化输出行为

定义一个复杂的Rust结构体`ComplexList`,它包含一个`Vec<(String, i32)>`类型的字段。要求自定义实现`Debug` trait,使得在使用`println!`结合`{:?}`格式化输出时,每个`(String, i32)`元组中的`String`部分全部转换为大写字母形式后输出,并且输出的整体格式要美观易读。阐述在实现这种自定义`Debug`输出时可能会遇到的难点及如何解决。
19.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::fmt;

struct ComplexList {
    data: Vec<(String, i32)>,
}

impl fmt::Debug for ComplexList {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_list()
         .entries(self.data.iter().map(|(s, i)| {
                let upper_s = s.to_uppercase();
                (upper_s.as_str(), *i)
            }))
         .finish()
    }
}

可能遇到的难点及解决方法:

  1. 字符串转换:需要将String转换为大写形式。可以使用to_uppercase方法来实现。
  2. 格式化输出:要以美观易读的方式输出,使用fmt::Formatter提供的debug_list等方法可以生成类似[("VALUE1", 1), ("VALUE2", 2)]这样的格式,保证了易读性。