Rust中漂亮地打印结构体

19

3
链接问题中的答案有什么问题吗?“使用#[derive(Debug)]是最简单的解决方案。” - John Kugelman
这是默认打印,而不是漂亮的打印。 - Coder
不,我不是要自问自答。但我正在寻找一种不使用任何其他特性的不同方法(如果可能的话)。 - Coder
2
根据 你链接的帖子 中的一条评论,您可以使用 {:#?} 来对 Debug 特质进行适度美化格式。 - Jeremy Meadows
没有,这正是Debug的初衷。 - cdhowie
1个回答

38
当您实现Debug时,Rust 提供了{:#?}来进行“漂亮打印”。从std::fmt文档中得知:
  • # - 标志位表示应使用“备用”打印形式。 备用形式包括:
    • {:#?} - 漂亮地打印Debug格式(添加换行和缩进)。
    • [其他省略]

示例:

#[derive(Debug)]
struct Person {
    name: &'static str,
    age: u8,
    hobbies: Vec<&'static str>,
}

fn main() {
    let peter = Person {
        name: "Jesse",
        age: 49,
        hobbies: vec!["crosswords", "sudoku"],
    };
    println!("{:#?}", peter);
}

输出:

Person {
    name: "Jesse",
    age: 49,
    hobbies: [
        "crosswords",
        "sudoku",
    ],
}

Playground


谢谢。这很有用。你知道为什么这不是默认的格式选项吗? - Coder
8
人们通常希望在日志信息中打印调试信息,这种情况下最好将所有信息放在同一行。 - John Kugelman
@VikasGoel 这太啰嗦了。我通过日志语句进行所有的调试。如果我打印出来的 Vec 都是漂亮的格式,那么我将会浏览数百行输出而不是不到一页。 - lmat - Reinstate Monica
使用第三方库时,这不是不能正常工作吗?除非你改变它们的代码。第三方库经常是问题的根源。如果能更容易些就好了。 - JohnAllen
它能够与第三方的木箱一起工作。 - John Kugelman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接