フォーマットして出力
Printing is handled by a series of macros
defined in std::fmt
some of which are:
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
型への型変換ができるようになります。
43行目 の#[allow(dead_code)]
は、直後のモジュールにのみ適用されるアトリビュートです。
演習
- 上の例(FIXME を参照)を実行した際に生じるエラーを修復しましょう。
Structure
構造体をフォーマットする行をアンコメントしてみましょう。(TODO を参照)println!
マクロを追加し、表示される小数部の桁数を調整してPi is roughly 3.142
という文字列を出力しましょう。ただし、円周率の値はlet pi = 3.141592
を使ってください。(ヒント:小数部の桁数を調整する方法については、std::fmt
をチェックする必要があるかもしれません。)