Debug

所有想要使用 std::fmt 格式化 trait 的类型都需要实现可打印的接口。自动实现仅为 std 库中的类型提供。其他所有类型必须以某种方式手动实现。

fmt::Debug trait 使这个过程非常直接。所有类型都可以 derive (自动创建) fmt::Debug 的实现。对于 fmt::Display 则不是这样,它必须手动实现。

#![allow(unused)] fn main() { // This structure cannot be printed either with `fmt::Display` or // with `fmt::Debug`. struct UnPrintable(i32); // The `derive` attribute automatically creates the implementation // required to make this `struct` printable with `fmt::Debug`. #[derive(Debug)] struct DebugPrintable(i32); }

所有 std 库类型都可以自动使用 {:?} 打印。

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

因此,fmt::Debug 肯定可以使类型可打印,但牺牲了一些优雅性。Rust 还提供了使用 {:#?} 的“漂亮打印”。

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

可以手动实现 fmt::Display 来控制显示。

另请参阅

attributesderivestd::fmt, 以及 struct