format!マクロは、書式に従った文字列(String)を返すマクロ。
(C言語のsprintf()やJavaのString.format()のようなもの)
let n = 123; let s = format!("n={}", n); let s = format!("n={n}"); let m = 456; let s = format!("n={}, m={}", n, m); let s = format!("n={n}, m={m}");
format!()の第1引数に書式入りの文字列を指定する。
第2引数以降は、書式に必要な値を指定する。
format!マクロはマクロなので、コンパイル前(プリコンパイル時)に展開される。
第2引数以降が書式に合致していないとコンパイルエラーになる。
print!系マクロもformat!マクロと同じ書式が利用できる。
format!()の第1引数には書式入りの文字列を指定する。
format!マクロで使用できる書式の詳細はModule std::fmtを参照。
書式 | 説明 | 例 |
---|---|---|
{} |
format!()の第2引数以降の値に置換する。 (to_stringメソッドを呼ぶので)値の型にはDisplayトレイトが実装されている必要がある。 {} が複数ある場合は、第2引数以降の値を順番に適用する。 |
let n = 123; |
{インデックス} |
{} 内に数値(インデックス)を入れると、そのインデックスに当たる引数が使われる。 |
let s = format!("{1} {} {0} {}", 'a', 'b'); |
{変数名} |
{} 内に文字列(変数名)を入れると、その名前の変数の値に置換する。第2引数以降で一時的な名前を付ける使い方と、format!()の外の変数を読む使い方がある。 |
let s = format!("n={n}",
n = 123); |
let n = 123; |
||
{〜:書式パラメーター} |
{} 内にコロン「: 」で区切って書式パラーメーターを指定することが出来る。 |
let v = vec![1, 2, 3]; |
書式パラーメーターは、{}
内にコロン「:
」で区切ってコロンの後ろに指定する。
書式パラメーター | 説明 | 例 |
---|---|---|
数値 |
桁数を指定する。 | let s = format!("{:5}", 'x'); |
変数名$ |
桁数を変数で指定する。 | let s = format!("{:width$}", 'x',
width = 5); |
<数値 |
左寄せ | let s = format!("{:<5}", 'x'); |
^数値 |
中央揃え | let s = format!("{:^5}", 'x'); |
>数値 |
右寄せ | let s = format!("{:>5}", 'x'); |
0数値 |
指定された桁数での0埋め | let s = format!("{:05}", 123); |
+ |
符号付き | let s = format!("{:+}", 123); |
? |
Debugトレイトによる出力 | let v = vec![1, 2, 3]; |
#? |
Debugトレイトによる出力(pretty-print) | let v = vec![1, 2, 3]; |
#x |
十六進数 桁数を指定するときは、出力される「0x」の2桁分も考慮する必要がある。 |
let s = format!("{:#x}", 10); |
#b |
二進数 桁数を指定するときは、出力される「0b」の2桁分も考慮する必要がある。 |
let s = format!("{:#b}", 10); |
#o |
八進数 |