调试 Debug

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

fmt::Debug trait 使这变得非常简单。所有类型都可以 derive(自动创建) fmt::Debug 实现。但这对 fmt::Display 不适用,后者必须手动实现。

#![allow(unused)] fn main() { // 这个结构体无法通过 `fmt::Display` 或 `fmt::Debug` 打印。 struct UnPrintable(i32); // `derive` 属性自动创建使这个 `struct` 可以用 `fmt::Debug` 打印的实现。 #[derive(Debug)] struct DebugPrintable(i32); }

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

所以 fmt::Debug 确实使其可打印,但牺牲了一些优雅。 Rust 还提供了使用 {:#?} 进行"美化打印"的功能。

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

另请参阅:

attributesderivestd::fmtstruct