はじめに
この記事は、私が Rust の学習時に書いた備忘録となります。間違い等があればコメント等で教えていただけると助かります。
プレースホルダーとは
Rust において、println!
, eprintln!
, format!
等のマクロに文字を埋め込むには、波括弧 {}
を使用する。これがプレースホルダーとなる。
fn main() {
println!("あ{}う{}お", "い", "え"); // あいうえお
println!("1 {} 3 {} 5", 2, 4); // 1 2 3 4 5
}
引数の順序指定
プレースホルダー内に添字を指定すれば並びを変えることができる。また、同じ引数を複数回使用することも可能。
println!("A{1}C{0}", "D", "B"); // ABCD
println!("贵樣{1}{1}{1}{1}{1}{0}", "!", "ァ"); // 贵樣ァァァァァ!
名前指定
引数に名前を付けると、可読性を向上させることができる。プレースホルダー内に指定した名前を指定すればよい。
println!(
"い{ro}は{ni}ほ{he}と",
ni="に",
he="へ",
ro="ろ"
); // いろはにほへと
n進数や指数表記にフォーマット
数値を他の形式にフォーマットすることも可能。
let int = 14;
println!("bin(2進数): {x:b}" ,x=int);
println!("oct(8進数): {x:o}" ,x=int);
println!("hex(16進数): {x:x}" ,x=int);
println!("exp(指数表記): {x:e}" ,x=int);
println!("HEX(大文字16進数): {x:X}" ,x=int);
println!("EXP(大文字指数表記): {x:E}" ,x=int);
println!("#を付けると整形: {x:#x}" ,x=int);
出力結果は以下の通り:
bin(2進数): 1110
oct(8進数): 16
hex(16進数): e
exp(指数表記): 1.4e1
HEX(大文字16進数): E
EXP(大文字指数表記): 1.4E1
#を付けると整形: 0xe
桁操作
-
x:<n
:x
の値を左寄せに配置して n 桁になる様に後ろに半角空白が入る。 -
x:>n
:x
の値を右寄せに配置して n 桁になる様に前に半角空白が入る。 -
x:^n
:x
の値を中央寄せに配置して n 桁になる様に両端に半角空白が入る。ただし、奇数桁の場合は後ろの半角空白が1つ多くなる。
n
の部分に直接数値を書かない場合は n$
の様に記載する。
また、x:0n
の様にすれば0で埋めることができる。もちろん0以外の文字も使用可能。
let x = 1000;
println!("{:<6}('ω' )", x); // 1000 ('ω' )
println!("( 'ω'){:>n$}", x, n=6); // ( 'ω') 1000
println!("( 'ω'){:^6}('ω' )", x); // ( 'ω') 1000 ('ω' )
println!("( 'ω'){:^7}('ω' )", x); // ( 'ω') 1000 ('ω' )
println!("{:06}", 1); // 000001
println!("{:优^10}", x); // 优优优1000优优优
小数の桁操作
x:.n
で x を小数第 n 位まで表示することができる。
println!("{:.5}", 0.01); // 0.01000
println!("{:.1$}", 0.01, 5); // 0.01000
println!("{:.3}", 0.0001); // 0.000
その他詳しい内容については標準ライブラリの fmt
モジュールのドキュメントを参照されたし。