std::fmt
のフォーマット用トレイト
を使用したい型は、出力できるように実装されている必要があります。std
ライブラリの型のように自動で出力可能なものもありますが、他はすべて 手動で実装する必要があります。
fmt::Debug
というトレイト
はこれを簡略化します。 すべての 型はfmt::Debug
の実装を導出(derive)
、(すなわち自動で作成)することができるためです。fmt::Display
の場合はやはり手動で実装しなくてはなりません。
#![allow(unused)]
fn main() {
struct UnPrintable(i32);
#[derive(Debug)]
struct DebugPrintable(i32);
}
std
ライブラリの型の場合は、自動的に{:?}
により出力可能になっています。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
fmt::Debug
は確実に出力可能にしてくれるのですが、一方である種の美しさを犠牲にしています。Rustは{:#?}
による「見栄えの良い出力」も提供します。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
手動でfmt::Display
を実装することで出力結果を思い通りにできます。
アトリビュート, derive
, std::fmt
, 構造体