所有的类型,若想用 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