我想自定义的输出struct叫FooOut,但我不想改变内场的调试输出FooIn这里面FooOut。考虑 Rust代码:
#[derive(Default)]
struct FooOut {
num1: u32,
num2: u32,
obj: FooIn,
}
#[derive(Debug, Default)]
struct FooIn {
bval: bool,
list: Vec<u32>,
}
impl std::fmt::Debug for FooOut {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "FooOut {{ sum: {}, num1: {}, num2: {}, obj: {} }}",
self.num1 + self.num2,
self.num1,
self.num2,
self.obj) // self.obj is not working without implementing it too
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我试图自定义FooOut(通过添加sum)的调试输出,但我不想自定义/重新实现FooIn. 有没有办法做到这一点?
我建议您使用Formatter::debug_struct(或其同级函数之一)代替自己手动构建调试字符串:
impl std::fmt::Debug for FooOut {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
f.debug_struct("FooOut")
.field("sum", &(self.num1 + self.num2))
.field("num1", &self.num1)
.field("num2", &self.num2)
.field("obj", &self.obj)
.finish()
}
}
Run Code Online (Sandbox Code Playgroud)
这是#[derive(Debug)]用于为对象构建默认调试字符串的内容。这还有一个额外的好处,即您可以{:?}使用{:#?}.