Struct 在`fmt::Display'中递归打印结构`

Struct 在`fmt::Display'中递归打印结构`,struct,console,rust,println,Struct,Console,Rust,Println,我目前正在为一个结构实现fmt::Display,以便将它打印到控制台。但是,该结构有一个字段,它是其类型的Vec 结构 看起来你很困惑,很困惑 {:?}使用Debug特性进行格式化。您可能没有在您的类型上实现Debug,因此会出现错误。要使用显示特性,请在格式字符串中写入{} write!(f, "CHILDREN:\n\t {}", node); Debug有一个(有些隐藏)功能,您可以使用格式说明符{:#?}漂亮地打印对象(带有缩进和多行)。如果重写结构的元素,使其具有与请求的输出相同的

我目前正在为一个结构实现
fmt::Display
,以便将它打印到控制台。但是,该结构有一个字段,它是其类型的
Vec

结构
看起来你很困惑,很困惑

{:?}
使用
Debug
特性进行格式化。您可能没有在您的类型上实现
Debug
,因此会出现错误。要使用
显示
特性,请在格式字符串中写入
{}

write!(f, "CHILDREN:\n\t {}", node);
Debug
有一个(有些隐藏)功能,您可以使用格式说明符
{:#?}
漂亮地打印对象(带有缩进和多行)。如果重写结构的元素,使其具有与请求的输出相同的顺序,并派生
Debug
trait

#[derive(Debug)]
pub struct Node<'a> {
    pub start_tag: &'a str,
    pub content: String,
    pub children: Vec<Node<'a>>,
    pub end_tag: &'a str,
}

在self.children中节点的

中尝试→ <代码>用于&self.children中的节点
。也可以使用
试试!()
围绕每个
。(欢迎将其格式化为答案。)顺便说一句,从语义上讲,这种输出更适合
调试
,而不是
显示
START TAG: "Hello"
CONTENT: ""
CHILDREN:
   PRINTS CHILDREN WITH INDENT
END TAG: "World"
write!(f, "CHILDREN:\n\t {}", node);
#[derive(Debug)]
pub struct Node<'a> {
    pub start_tag: &'a str,
    pub content: String,
    pub children: Vec<Node<'a>>,
    pub end_tag: &'a str,
}
Node {
    start_tag: "Hello",
    content: "",
    children: [
        Node {
            start_tag: "Foo",
            content: "",
            children: [],
            end_tag: "Bar"
        }
    ],
    end_tag: "World"
}