std::fmt
のフォーマット用トレイト
を使用したい型は、プリント可能である用に実装されている必要があります。std
ライブラリの型のように自動でプリント可能なものもありますが、他はすべて手動で実装する必要があります。
fmt::Debug
というトレイト
はこれを簡略化します。すべての型はfmt::Debug
の実装をderive
、(すなわち自動で作成)することができるためです。
fmt::Display
の場合はやはり手動で実装しなくてはなりません。
// この構造体は`fmt::Display`、`fmt::Debug`のいずれによっても
// プリントすることができません。
struct UnPrintable(i32);
// `derive`アトリビュートは、
// この構造体を`fmt::Debug`でプリントするための実装を自動で提供します。
#[derive(Debug)]
struct DebugPrintable(i32);
std
ライブラリの型の場合は、自動的に{:?}
によりプリント可能になっています。
fmt::Debug
は確実にプリント可能にしてくれるのですが、一方である種の美しさを犠牲にしています。
fmt::Display
を手動で実装すればその美しさを取り戻す事ができるでしょう。