フォーマットしてプリント
プリント関係の機能はstd::fmt
で定義される幾つかのマクロによって扱われます。このマクロには以下が含まれます。
format!
: フォーマットされたテキストを文字列(String)型に書き込みます。print!
:format!
と同様ですが、コンソール (io::stdout) にそのテキストを出力します。println!
:print!
: と同じですが改行が付け加えられます。eprint!
:format!
と同様ですが、標準エラー出力 (io::stderr) にそのテキストを出力します。eprintln!
:eprint!
と同じですが改行が付け加えられます。
すべて同じやり方でテキストをパースし、正しくフォーマットできるかコンパイル時にチェックします。
std::fmt
はいくつものトレイトを持ち、それによってどのようにディスプレイに表示されるかが決まります。
特に大事な形式は以下の2つです。
fmt::Debug
: は、{:?}
というマーカーを使用し、デバッギング目的に使われます。fmt::Display
: は{}
というマーカーを使用し、より美しく、ユーザフレンドリーに表示します。
この例で用いられている型は、標準ライブラリに含まれているため、ここではfmt::Display
を使用しています。カスタム型をテキストとして表示する場合は、さらに手順が必要です。
fmt::Display
トレイトを実装すると、自動的にToString
トレイトが実装されます。これによりString
型への型変換ができるようになります。
46行目 の#[allow(dead_code)]
は、直後のモジュールにのみ適用されるアトリビュートです。
演習
- 上の例を実行した際に生じるエラーを修復しましょう。
Structure
構造体をフォーマットする行をアンコメントしてみましょう。println!
マクロを追加し、表示される小数部の桁数を調整してPi is roughly 3.142
という文字列を出力しましょう。 ただし、円周率の値はlet pi = 3.141592
を使ってください。(ヒント: 小数部の桁数を調整する方法については、std::fmt
をチェックする必要があるかもしれません。)