所有想要使用 std::fmt
格式化 traits
的类型都需要实现才能打印。 自动实现仅为 std
库中的类型提供。所有其他类型都必须以某种方式手动实现。
fmt::Debug
trait 使这变得非常简单。所有类型都可以 derive
(自动创建) fmt::Debug
实现。但这对 fmt::Display
不适用,后者必须手动实现。
#![allow(unused)]
fn main() {
struct UnPrintable(i32);
#[derive(Debug)]
struct DebugPrintable(i32);
}
所有 std
库类型也可以自动使用 {:?}
打印:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
所以 fmt::Debug
确实使其可打印,但牺牲了一些优雅。 Rust 还提供了使用 {:#?}
进行"美化打印"的功能。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
可以手动实现 fmt::Display
来控制显示方式。
attributes
、 derive
、std::fmt
和 struct