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"
}